java110
2022-02-25 8a2a463d46b3dce73015462c9f6a2a258dd25f5b
java110-core/src/main/java/com/java110/core/event/cmd/ServiceCmdEventPublishing.java
@@ -1,15 +1,12 @@
package com.java110.core.event.cmd;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.context.DataFlowContext;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.context.ICmdDataFlowContext;
import com.java110.core.event.center.DataFlowListenerOrderComparator;
import com.java110.core.event.service.api.ServiceDataFlowEvent;
import com.java110.core.event.service.api.ServiceDataFlowListener;
import com.java110.entity.center.AppService;
import com.java110.core.log.LoggerFactory;
import com.java110.dto.CmdListenerDto;
import com.java110.utils.constant.CommonConstant;
import com.java110.utils.constant.ResponseConstant;
import com.java110.utils.constant.ServiceCodeConstant;
import com.java110.utils.exception.BusinessException;
import com.java110.utils.exception.CmdException;
import com.java110.utils.exception.ListenerExecuteException;
@@ -17,9 +14,10 @@
import com.java110.utils.log.LoggerEngine;
import com.java110.utils.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod;
import sun.misc.ProxyGenerator;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -42,7 +40,7 @@
    /**
     * 保存侦听实例信息,一般启动时加载
     */
    private static final List<String> listeners = new ArrayList<String>();
    private static final List<CmdListenerDto> listeners = new ArrayList<CmdListenerDto>();
    /**
     * 根据 事件类型查询侦听
@@ -54,7 +52,7 @@
     *
     * @param listener
     */
    public static void addListener(String listener) {
    public static void addListener(CmdListenerDto listener) {
        listeners.add(listener);
    }
@@ -63,7 +61,7 @@
     *
     * @return
     */
    public static List<String> getListeners() {
    public static List<CmdListenerDto> getListeners() {
        return listeners;
    }
@@ -85,10 +83,10 @@
        }
        List<ServiceCmdListener> cmdListeners = new ArrayList<ServiceCmdListener>();
        for (String listenerBeanName : getListeners()) {
            ServiceCmdListener listener = ApplicationContextFactory.getBean(listenerBeanName, ServiceCmdListener.class);
            Java110Cmd java110Cmd = listener.getClass().getDeclaredAnnotation(Java110Cmd.class);
            if(java110Cmd.serviceCode().equals(serviceCode)) {
        for (CmdListenerDto listenerBean : getListeners()) {
            //ServiceCmdListener listener = ApplicationContextFactory.getBean(listenerBean.getBeanName(), ServiceCmdListener.class);
            ServiceCmdListener listener = ApplicationContextFactory.getBean(listenerBean.getBeanName(), ServiceCmdListener.class);
            if (listenerBean.getServiceCode().equals(serviceCode)) {
                cmdListeners.add(listener);
            }
        }
@@ -123,7 +121,7 @@
     * @param dataFlowContext
     */
    public static void multicastEvent(String serviceCode, ICmdDataFlowContext dataFlowContext) throws BusinessException {
        multicastEvent(serviceCode, dataFlowContext,  null);
        multicastEvent(serviceCode, dataFlowContext, null);
    }
    /**
@@ -198,10 +196,34 @@
    @SuppressWarnings({"unchecked", "rawtypes"})
    protected static void invokeListener(ServiceCmdListener listener, CmdEvent event) {
        try {
            listener.cmd(event);
            //        //这里处理业务逻辑数据
            ICmdDataFlowContext dataFlowContext = event.getCmdDataFlowContext();
            //获取请求数据
            JSONObject reqJson = dataFlowContext.getReqJson();
            logger.debug("API服务 --- 请求参数为:{}", reqJson.toJSONString());
            listener.validate(event, dataFlowContext, reqJson);
            listener.doCmd(event, dataFlowContext, reqJson);
            //logger.debug("API服务 --- 返回报文信息:{}", dataFlowContext.getResponseEntity());
            //   listener.cmd(event);
        } catch (CmdException e) {
            LoggerEngine.error("发布侦听失败", e);
            throw e;
        }
    }
    public static void testPoxy(Class clazz) {
        byte[] bytes = ProxyGenerator.generateProxyClass("$Proxy", new Class[]{clazz});
        try (
                FileOutputStream fos = new FileOutputStream(new File("D:/$Proxy.class"))
        ) {
            fos.write(bytes);
            fos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}