java110 лет назад: 4
Родитель
Сommit
9fdce7508a
22 измененных файлов с 570 добавлено и 16 удалено
  1. 40 0
      java110-bean/src/main/java/com/java110/dto/trace/TraceAnnotationsDto.java
  2. 63 0
      java110-bean/src/main/java/com/java110/dto/trace/TraceDto.java
  3. 32 0
      java110-bean/src/main/java/com/java110/dto/trace/TraceEndpointDto.java
  4. 10 1
      java110-core/src/main/java/com/java110/core/aop/FeignRequestInterceptor.java
  5. 24 0
      java110-core/src/main/java/com/java110/core/aop/Java110FeignClientAop.java
  6. 41 0
      java110-core/src/main/java/com/java110/core/aop/Java110RestTemplateInterceptor.java
  7. 49 0
      java110-core/src/main/java/com/java110/core/aop/Java110TraceHandlerInterceptor.java
  8. 218 0
      java110-core/src/main/java/com/java110/core/factory/Java110TraceFactory.java
  9. 14 2
      java110-utils/src/main/java/com/java110/utils/constant/CommonConstant.java
  10. 7 0
      service-acct/src/main/java/com/java110/acct/AcctServiceApplicationStart.java
  11. 7 1
      service-api/src/main/java/com/java110/api/ApiApplicationStart.java
  12. 9 5
      service-api/src/main/java/com/java110/api/aop/PageProcessAspect.java
  13. 5 1
      service-common/src/main/java/com/java110/common/CommonServiceApplicationStart.java
  14. 5 1
      service-community/src/main/java/com/java110/community/CommunityServiceApplicationStart.java
  15. 8 3
      service-dev/src/main/java/com/java110/dev/DevServiceApplicationStart.java
  16. 5 1
      service-fee/src/main/java/com/java110/fee/FeeServiceApplicationStart.java
  17. 6 0
      service-job/src/main/java/com/java110/job/JobServiceApplication.java
  18. 5 0
      service-oa/src/main/java/com/java110/oa/OaServiceApplicationStart.java
  19. 6 0
      service-order/src/main/java/com/java110/order/OrderServiceApplicationStart.java
  20. 5 1
      service-report/src/main/java/com/java110/report/ReportServiceApplicationStart.java
  21. 5 0
      service-store/src/main/java/com/java110/store/StoreServiceApplicationStart.java
  22. 6 0
      service-user/src/main/java/com/java110/user/UserServiceApplicationStart.java

+ 40 - 0
java110-bean/src/main/java/com/java110/dto/trace/TraceAnnotationsDto.java

@@ -0,0 +1,40 @@
+package com.java110.dto.trace;
+
+import java.io.Serializable;
+
+public class TraceAnnotationsDto implements Serializable {
+    public static final String VALUE_CLIENT_SEND = "cs"; // 客户端发送
+    public static final String VALUE_CLIENT_RECEIVE = "cr"; // 客户端接受
+    public static final String VALUE_SERVER_SEND = "ss"; // 服务端发送
+    public static final String VALUE_SERVER_RECEIVE = "sr"; // 服务端接受
+    private long timestamp;
+    private String value;
+
+
+    private TraceEndpointDto traceEndpoint;
+
+
+    public long getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(long timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public TraceEndpointDto getTraceEndpoint() {
+        return traceEndpoint;
+    }
+
+    public void setTraceEndpoint(TraceEndpointDto traceEndpoint) {
+        this.traceEndpoint = traceEndpoint;
+    }
+}

+ 63 - 0
java110-bean/src/main/java/com/java110/dto/trace/TraceDto.java

@@ -0,0 +1,63 @@
+package com.java110.dto.trace;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class TraceDto implements Serializable {
+    private String id;
+    private String traceId;
+    private String parentSpanId;
+    private String name;
+    private long timestamp;
+
+    private List<TraceAnnotationsDto> traceAnnotations;
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getTraceId() {
+        return traceId;
+    }
+
+    public void setTraceId(String traceId) {
+        this.traceId = traceId;
+    }
+
+    public String getParentSpanId() {
+        return parentSpanId;
+    }
+
+    public void setParentSpanId(String parentSpanId) {
+        this.parentSpanId = parentSpanId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public long getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(long timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public List<TraceAnnotationsDto> getTraceAnnotations() {
+        return traceAnnotations;
+    }
+
+    public void setTraceAnnotations(List<TraceAnnotationsDto> traceAnnotations) {
+        this.traceAnnotations = traceAnnotations;
+    }
+}

+ 32 - 0
java110-bean/src/main/java/com/java110/dto/trace/TraceEndpointDto.java

@@ -0,0 +1,32 @@
+package com.java110.dto.trace;
+
+public class TraceEndpointDto {
+
+    private String serviceName;
+    private String ipv4;
+    private String port;
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public String getIpv4() {
+        return ipv4;
+    }
+
+    public void setIpv4(String ipv4) {
+        this.ipv4 = ipv4;
+    }
+
+    public String getPort() {
+        return port;
+    }
+
+    public void setPort(String port) {
+        this.port = port;
+    }
+}

+ 10 - 1
java110-core/src/main/java/com/java110/core/aop/FeignRequestInterceptor.java

@@ -1,6 +1,9 @@
 package com.java110.core.aop;
 
+import com.java110.core.factory.Java110TraceFactory;
 import com.java110.core.factory.Java110TransactionalFactory;
+import com.java110.dto.trace.TraceDto;
+import com.java110.utils.constant.CommonConstant;
 import feign.RequestInterceptor;
 import feign.RequestTemplate;
 import org.springframework.context.annotation.Configuration;
@@ -15,7 +18,7 @@ import org.springframework.util.StringUtils;
  * add by wuxw 2020/7/5
  **/
 @Configuration
-public class  FeignRequestInterceptor implements RequestInterceptor {
+public class FeignRequestInterceptor implements RequestInterceptor {
 
 
     /**
@@ -29,5 +32,11 @@ public class  FeignRequestInterceptor implements RequestInterceptor {
         if (!StringUtils.isEmpty(oId)) {
             requestTemplate.header(Java110TransactionalFactory.O_ID, oId);
         }
+        //调用链头信息
+        TraceDto traceDto = Java110TraceFactory.getTraceDto();
+        if (traceDto != null) {
+            requestTemplate.header(CommonConstant.TRACE_ID, traceDto.getTraceId());
+            requestTemplate.header(CommonConstant.PARENT_SPAN_ID, traceDto.getId());
+        }
     }
 }

+ 24 - 0
java110-core/src/main/java/com/java110/core/aop/Java110FeignClientAop.java

@@ -0,0 +1,24 @@
+package com.java110.core.aop;
+
+import com.java110.core.factory.Java110TraceFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.trace.TraceAnnotationsDto;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.slf4j.Logger;
+
+@Aspect
+public class Java110FeignClientAop {
+    private static Logger logger = LoggerFactory.getLogger(Java110FeignClientAop.class);
+
+    @Around("execution (* feign.Client.*(..)) && !within(is(FinalType))")
+    public Object feignClientWasCalled(final ProceedingJoinPoint pjp) throws Throwable {
+
+        Java110TraceFactory.putAnnotations(TraceAnnotationsDto.VALUE_SERVER_SEND);
+        Object clientHttpResponse = pjp.proceed();
+        Java110TraceFactory.putAnnotations(TraceAnnotationsDto.VALUE_SERVER_RECEIVE);
+        return clientHttpResponse;
+    }
+
+}

+ 41 - 0
java110-core/src/main/java/com/java110/core/aop/Java110RestTemplateInterceptor.java

@@ -0,0 +1,41 @@
+package com.java110.core.aop;
+
+import com.java110.core.factory.Java110TraceFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.trace.TraceAnnotationsDto;
+import com.java110.dto.trace.TraceDto;
+import com.java110.utils.constant.CommonConstant;
+import org.slf4j.Logger;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpRequest;
+import org.springframework.http.client.ClientHttpRequestExecution;
+import org.springframework.http.client.ClientHttpRequestInterceptor;
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+/**
+ * restremplate 请求拦截器
+ */
+@Component
+public class Java110RestTemplateInterceptor implements ClientHttpRequestInterceptor {
+    private static Logger logger = LoggerFactory.getLogger(Java110RestTemplateInterceptor.class);
+
+    @Override
+    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
+        logger.error("进入连接器" + new String(body));
+        TraceDto traceDto = Java110TraceFactory.getTraceDto();
+        if (traceDto != null) {
+            HttpHeaders httpHeaders = request.getHeaders();
+            httpHeaders.remove(CommonConstant.TRACE_ID);
+            httpHeaders.remove(CommonConstant.PARENT_SPAN_ID);
+            httpHeaders.add(CommonConstant.TRACE_ID, traceDto.getTraceId());
+            httpHeaders.add(CommonConstant.PARENT_SPAN_ID, traceDto.getId());
+        }
+        Java110TraceFactory.putAnnotations(TraceAnnotationsDto.VALUE_SERVER_SEND);
+        ClientHttpResponse clientHttpResponse = execution.execute(request, body);
+        Java110TraceFactory.putAnnotations(TraceAnnotationsDto.VALUE_SERVER_RECEIVE);
+        return clientHttpResponse;
+    }
+}

+ 49 - 0
java110-core/src/main/java/com/java110/core/aop/Java110TraceHandlerInterceptor.java

@@ -0,0 +1,49 @@
+package com.java110.core.aop;
+
+import com.java110.core.factory.Java110TraceFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.trace.TraceAnnotationsDto;
+import org.slf4j.Logger;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 所有请求 调用链 拦截
+ * Created by wuxw on 2018/5/2.
+ */
+@Component
+public class Java110TraceHandlerInterceptor implements HandlerInterceptor {
+
+    private static Logger logger = LoggerFactory.getLogger(Java110TraceHandlerInterceptor.class);
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        logger.debug("进入拦截器Java110TraceHandlerInterceptor>>preHandle");
+        // 获取组件名称 和方法名称
+        String url = request.getRequestURL() != null ? request.getRequestURL().toString() : "";
+        Map<String, Object> headers = new HashMap<>();
+        Enumeration reqHeaderEnum = request.getHeaderNames();
+        while (reqHeaderEnum.hasMoreElements()) {
+            String headerName = (String) reqHeaderEnum.nextElement();
+            headers.put(headerName.toLowerCase(), request.getHeader(headerName));
+        }
+        //调用链
+        Java110TraceFactory.createTrace(url, headers);
+        return true;
+    }
+
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        logger.debug("完成拦截器Java110TraceHandlerInterceptor>>afterCompletion");
+        Java110TraceFactory.putAnnotations(TraceAnnotationsDto.VALUE_CLIENT_RECEIVE);
+    }
+
+
+}

+ 218 - 0
java110-core/src/main/java/com/java110/core/factory/Java110TraceFactory.java

@@ -0,0 +1,218 @@
+package com.java110.core.factory;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.trace.TraceAnnotationsDto;
+import com.java110.dto.trace.TraceDto;
+import com.java110.dto.trace.TraceEndpointDto;
+import com.java110.utils.constant.CommonConstant;
+import com.java110.utils.factory.ApplicationContextFactory;
+import com.java110.utils.kafka.KafkaFactory;
+import com.java110.utils.util.DateUtil;
+import org.slf4j.Logger;
+import org.springframework.core.env.Environment;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName Java110TransactionalFactory
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2020/7/3 22:30
+ * @Version 1.0
+ * add by wuxw 2020/7/3
+ **/
+public class Java110TraceFactory {
+
+    private static Logger logger = LoggerFactory.getLogger(Java110TraceFactory.class);
+
+    // trace-id
+    public static final String TRACE_ID = "TRACE-ID";
+
+    //SPAN-ID
+    public static final String SPAN_ID = "SPAN-ID";
+
+    //SPAN-ID
+    public static final String PARENT_SPAN_ID = "PARENT-SPAN-ID";
+
+    public static final String LOG_TRACE_TOPIC = "logTrace";
+
+    private static ThreadLocal<Map<String, String>> spanId = new ThreadLocal<Map<String, String>>() {
+        @Override
+        protected Map<String, String> initialValue() {
+            return new HashMap<String, String>();
+        }
+    };
+
+    public static String putSpanId(String key, String value) {
+        return spanId.get().put(key, value);
+    }
+
+    public static String getSpanId(String key) {
+        return spanId.get().get(key);
+    }
+
+    public static String removeSpanId(String key) {
+        return spanId.get().remove(key);
+    }
+
+    public static Map<String, String> entriesSpanId() {
+        return spanId.get();
+    }
+
+    /**
+     * 清理事务
+     */
+    public static void clearSpanId() {
+        remove(SPAN_ID);
+    }
+
+
+    private static ThreadLocal<Map<String, TraceDto>> threadLocal = new ThreadLocal<Map<String, TraceDto>>() {
+        @Override
+        protected Map<String, TraceDto> initialValue() {
+            return new HashMap<String, TraceDto>();
+        }
+    };
+
+    public static TraceDto put(String key, TraceDto value) {
+        return threadLocal.get().put(key, value);
+    }
+
+    public static TraceDto get(String key) {
+        return threadLocal.get().get(key);
+    }
+
+    public static TraceDto remove(String key) {
+        return threadLocal.get().remove(key);
+    }
+
+    public static Map<String, TraceDto> entries() {
+        return threadLocal.get();
+    }
+
+    public static String createTrace(String name, Map<String, Object> headers) {
+        String traceId = "";
+        String parentId = "";
+        if (headers.containsKey(CommonConstant.TRANSACTION_ID)) {
+            traceId = headers.get(CommonConstant.TRANSACTION_ID).toString();
+        } else {
+            traceId = GenerateCodeFactory.getUUID();
+        }
+        if (headers.containsKey(CommonConstant.PARENT_SPAN_ID)) {
+            parentId = headers.get(CommonConstant.PARENT_SPAN_ID).toString();
+        } else {
+            parentId = "0";
+        }
+        return createTrace(name, traceId, parentId, TraceAnnotationsDto.VALUE_CLIENT_SEND);
+    }
+
+
+    public static String createTrace(String name, String traceId, String parentId, String event) {
+        //全局事务开启者
+        TraceDto traceDto = new TraceDto();
+        traceDto.setId(GenerateCodeFactory.getUUID());
+        traceDto.setName(name);
+        traceDto.setParentSpanId(parentId);
+        traceDto.setTimestamp(DateUtil.getCurrentDate().getTime());
+
+        //初始事件
+        Environment environment = (Environment) ApplicationContextFactory.getBean(Environment.class);
+        TraceAnnotationsDto traceAnnotationsDto = new TraceAnnotationsDto();
+        TraceEndpointDto traceEndpointDto = new TraceEndpointDto();
+        traceEndpointDto.setServiceName(environment.getProperty("spring.application.name"));
+        traceEndpointDto.setPort(environment.getProperty("server.port"));
+        InetAddress addr = null;
+        String ip = "";
+        try {
+            addr = InetAddress.getLocalHost();
+            ip = addr.getHostAddress();
+        } catch (UnknownHostException e) {
+            ip = "127.0.0.1";
+        }
+        traceEndpointDto.setIpv4(ip);
+        traceAnnotationsDto.setTraceEndpoint(traceEndpointDto);
+        traceAnnotationsDto.setTimestamp(DateUtil.getCurrentDate().getTime());
+        traceAnnotationsDto.setValue(event);
+
+        List<TraceAnnotationsDto> traceAnnotationsDtos = new ArrayList<>();
+        traceAnnotationsDtos.add(traceAnnotationsDto);
+        traceDto.setTraceAnnotations(traceAnnotationsDtos);
+        traceDto.setTraceId(traceId);
+        put(traceDto.getId(), traceDto);
+        putSpanId(SPAN_ID, traceDto.getId());
+        return traceDto.getId();
+    }
+
+    /**
+     * 添加动作时间
+     *
+     * @param event
+     */
+    public static void putAnnotations(String event) {
+        TraceDto traceDto = getTraceDto();
+
+        if (traceDto == null) {
+            return;
+        }
+
+        //初始事件
+        Environment environment = (Environment) ApplicationContextFactory.getBean(Environment.class);
+        TraceAnnotationsDto traceAnnotationsDto = new TraceAnnotationsDto();
+        TraceEndpointDto traceEndpointDto = new TraceEndpointDto();
+        traceEndpointDto.setServiceName(environment.getProperty("spring.application.name"));
+        traceEndpointDto.setPort(environment.getProperty("server.port"));
+        InetAddress addr = null;
+        String ip = "";
+        try {
+            addr = InetAddress.getLocalHost();
+            ip = addr.getHostAddress();
+        } catch (UnknownHostException e) {
+            ip = "127.0.0.1";
+        }
+        traceEndpointDto.setIpv4(ip);
+        traceAnnotationsDto.setTraceEndpoint(traceEndpointDto);
+        traceAnnotationsDto.setTimestamp(DateUtil.getCurrentDate().getTime());
+        traceAnnotationsDto.setValue(event);
+
+        List<TraceAnnotationsDto> traceAnnotationsDtos = traceDto.getTraceAnnotations();
+        traceAnnotationsDtos.add(traceAnnotationsDto);
+        traceDto.setTraceAnnotations(traceAnnotationsDtos);
+        put(getSpanId(SPAN_ID), traceDto);
+        //判断是否为cr
+        if (!TraceAnnotationsDto.VALUE_CLIENT_RECEIVE.equals(traceAnnotationsDto.getValue())) {
+            return;
+        }
+
+        try {
+            KafkaFactory.sendKafkaMessage(LOG_TRACE_TOPIC, JSONObject.toJSONString(traceDto));
+        } catch (Exception e) {
+            logger.error("发送log trace  异常", e);
+        }
+        clearTrace(getSpanId(SPAN_ID));
+        clearSpanId();
+    }
+
+    /**
+     * 清理事务
+     */
+    public static void clearTrace(String spanId) {
+        remove(spanId);
+    }
+
+    /**
+     * 获取事务ID
+     *
+     * @return
+     */
+    public static TraceDto getTraceDto() {
+        TraceDto traceDto = get(getSpanId(SPAN_ID));
+        return traceDto;
+    }
+
+}

+ 14 - 2
java110-utils/src/main/java/com/java110/utils/constant/CommonConstant.java

@@ -60,7 +60,7 @@ public class CommonConstant {
     /**
      * 默认过期时间
      */
-    public final static String DEFAULT_JWT_EXPIRE_TIME = 2*60*60 + "";
+    public final static String DEFAULT_JWT_EXPIRE_TIME = 2 * 60 * 60 + "";
 
     /**
      * 登录时的用户ID
@@ -134,7 +134,6 @@ public class CommonConstant {
     public final static String CACHE_BUSINESS_TABLE_HIS = "BUSINESS_TABLE_HIS";
 
 
-
     /**
      * 映射 缓存常量
      */
@@ -211,6 +210,19 @@ public class CommonConstant {
     public final static String HC_APP_FRONT_APP_ID = "8000418004";
 
 
+    /**
+     * 调用链相关
+
+     */
+    // trace-id
+    public static final String TRACE_ID = "TRACE-ID";
+
+    //SPAN-ID
+    public static final String SPAN_ID = "SPAN-ID";
+
+    //SPAN-ID
+    public static final String PARENT_SPAN_ID = "PARENT-SPAN-ID";
+
 
     public static String getHttpMethodStr(HttpMethod httpMethod) {
         if (HttpMethod.GET == httpMethod) {

+ 7 - 0
service-acct/src/main/java/com/java110/acct/AcctServiceApplicationStart.java

@@ -2,6 +2,7 @@ package com.java110.acct;
 
 import com.java110.core.annotation.Java110CmdDiscovery;
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.cmd.ServiceCmdEventPublishing;
 import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing;
@@ -18,6 +19,7 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -47,11 +49,15 @@ public class AcctServiceApplicationStart {
 
     private static final String LISTENER_PATH = "java110.UserService.listeners";
 
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
+
     public static void main(String[] args) throws Exception {
         try {
             ServiceStartInit.preInitSystemConfig();
             ApplicationContext context = SpringApplication.run(AcctServiceApplicationStart.class, args);
             ServiceStartInit.initSystemConfig(context);
+
             //加载业务侦听
             // SystemStartLoadBusinessConfigure.initSystemConfig(LISTENER_PATH);
         } catch (Throwable e) {
@@ -69,6 +75,7 @@ public class AcctServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 7 - 1
service-api/src/main/java/com/java110/api/ApiApplicationStart.java

@@ -16,12 +16,13 @@
 package com.java110.api;
 
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.service.api.ServiceDataFlowEventPublishing;
+import com.java110.core.log.LoggerFactory;
 import com.java110.service.init.ServiceStartInit;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
-import com.java110.core.log.LoggerFactory;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -42,6 +43,7 @@ import springfox.documentation.spi.DocumentationType;
 import springfox.documentation.spring.web.plugins.Docket;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -73,6 +75,9 @@ public class ApiApplicationStart {
 
     private static Logger logger = LoggerFactory.getLogger(ApiApplicationStart.class);
 
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
+
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
      *
@@ -83,6 +88,7 @@ public class ApiApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 9 - 5
service-api/src/main/java/com/java110/api/aop/PageProcessAspect.java

@@ -3,8 +3,9 @@ package com.java110.api.aop;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.context.IPageData;
 import com.java110.core.context.PageData;
-import com.java110.core.context.SecureInvocation;
+import com.java110.core.factory.Java110TraceFactory;
 import com.java110.core.log.LoggerFactory;
+import com.java110.dto.trace.TraceAnnotationsDto;
 import com.java110.utils.constant.CommonConstant;
 import com.java110.utils.exception.FilterException;
 import com.java110.utils.util.StringUtil;
@@ -113,7 +114,6 @@ public class PageProcessAspect {
         String componentMethod = "";
         if (url.contains("callComponent")) { //组件处理
             String[] urls = url.split("/");
-
             if (urls.length == 6) {
                 componentCode = urls[4];
                 componentMethod = urls[5];
@@ -139,8 +139,11 @@ public class PageProcessAspect {
 
         logger.debug("切面 获取到的pd=" + JSONObject.toJSONString(pd));
         request.setAttribute(CommonConstant.CONTEXT_PAGE_DATA, pd);
+        //调用链
+        //Java110TraceFactory.createTrace(componentCode + "/" + componentMethod, headers);
     }
 
+
     @AfterReturning(returning = "ret", pointcut = "dataProcess()")
     public void doAfterReturning(Object ret) throws Throwable {
         // 处理完请求,返回内容
@@ -156,14 +159,15 @@ public class PageProcessAspect {
     public void after(JoinPoint jp) throws IOException {
         // 接收到请求,记录请求内容
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-
         HttpServletRequest request = attributes.getRequest();
+        //记录调用链
+        //Java110TraceFactory.putAnnotations(TraceAnnotationsDto.VALUE_CLIENT_RECEIVE);
+
         PageData pd = request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA) != null ? (PageData) request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA) : null;
         //保存日志处理
         if (pd == null) {
             return;
         }
-
         //写cookies信息
         writeCookieInfo(pd, attributes);
 
@@ -194,7 +198,7 @@ public class PageProcessAspect {
             return token;
         }
         for (Cookie cookie : request.getCookies()) {
-            if (CommonConstant.COOKIE_AUTH_TOKEN.equals(cookie.getName()) ) {
+            if (CommonConstant.COOKIE_AUTH_TOKEN.equals(cookie.getName())) {
                 token = cookie.getValue();
             }
         }

+ 5 - 1
service-common/src/main/java/com/java110/common/CommonServiceApplicationStart.java

@@ -17,6 +17,7 @@ package com.java110.common;
 
 import com.java110.core.annotation.Java110CmdDiscovery;
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.cmd.ServiceCmdEventPublishing;
 import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing;
@@ -35,6 +36,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -76,7 +78,8 @@ public class CommonServiceApplicationStart {
 
     private static Logger logger = LoggerFactory.getLogger(CommonServiceApplicationStart.class);
 
-
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
      *
@@ -87,6 +90,7 @@ public class CommonServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 5 - 1
service-community/src/main/java/com/java110/community/CommunityServiceApplicationStart.java

@@ -17,6 +17,7 @@ package com.java110.community;
 
 import com.java110.core.annotation.Java110CmdDiscovery;
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.cmd.ServiceCmdEventPublishing;
 import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing;
@@ -33,6 +34,7 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -57,7 +59,8 @@ import java.nio.charset.Charset;
 public class CommunityServiceApplicationStart {
 
     private static Logger logger = LoggerFactory.getLogger(CommunityServiceApplicationStart.class);
-
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
 
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
@@ -69,6 +72,7 @@ public class CommunityServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 8 - 3
service-dev/src/main/java/com/java110/dev/DevServiceApplicationStart.java

@@ -1,15 +1,16 @@
 package com.java110.dev;
 
 import com.java110.core.annotation.Java110CmdDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.cmd.ServiceCmdEventPublishing;
+import com.java110.core.log.LoggerFactory;
 import com.java110.dev.smo.IDevServiceCacheSMO;
 import com.java110.service.init.ServiceStartInit;
 import com.java110.utils.cache.MappingCache;
 import com.java110.utils.factory.ApplicationContextFactory;
 import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
-import com.java110.core.log.LoggerFactory;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration;
@@ -19,9 +20,9 @@ import org.springframework.cloud.client.loadbalancer.LoadBalanced;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.EnableAspectJAutoProxy;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -50,6 +51,8 @@ public class DevServiceApplicationStart {
 
     private static Logger logger = LoggerFactory.getLogger(DevServiceApplicationStart.class);
 
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
 
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
@@ -61,6 +64,8 @@ public class DevServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
+
         return restTemplate;
     }
 
@@ -105,7 +110,7 @@ public class DevServiceApplicationStart {
         logger.debug("判断是否需要刷新日志,参数 args 为 {}", args);
 
         //因为好多朋友启动时 不加 参数-Dcache 所以启动时检测 redis 中是否存在 java110_hc_version
-       String mapping = MappingCache.getValue("java110_hc_version");
+        String mapping = MappingCache.getValue("java110_hc_version");
         //String mapping = "";
         if (StringUtil.isEmpty(mapping)) {
             IDevServiceCacheSMO devServiceCacheSMOImpl = (IDevServiceCacheSMO) ApplicationContextFactory.getBean("devServiceCacheSMOImpl");

+ 5 - 1
service-fee/src/main/java/com/java110/fee/FeeServiceApplicationStart.java

@@ -2,6 +2,7 @@ package com.java110.fee;
 
 import com.java110.core.annotation.Java110CmdDiscovery;
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.cmd.ServiceCmdEventPublishing;
 import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing;
@@ -18,6 +19,7 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -48,7 +50,8 @@ public class FeeServiceApplicationStart {
 
     private static Logger logger = LoggerFactory.getLogger(FeeServiceApplicationStart.class);
 
-
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
      *
@@ -59,6 +62,7 @@ public class FeeServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 6 - 0
service-job/src/main/java/com/java110/job/JobServiceApplication.java

@@ -1,6 +1,7 @@
 package com.java110.job;
 
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing;
 import com.java110.service.init.ServiceStartInit;
@@ -18,6 +19,7 @@ import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 @SpringBootApplication(
@@ -50,10 +52,14 @@ public class JobServiceApplication {
 
     private static final String LISTENER_PATH = "java110.job.listeners";
 
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
+
     @Bean
     public RestTemplate outRestTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 5 - 0
service-oa/src/main/java/com/java110/oa/OaServiceApplicationStart.java

@@ -17,6 +17,7 @@ package com.java110.oa;
 
 import com.java110.core.annotation.Java110CmdDiscovery;
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.cmd.ServiceCmdEventPublishing;
 import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing;
@@ -34,6 +35,7 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -62,6 +64,8 @@ public class OaServiceApplicationStart {
 
     private static Logger logger = LoggerFactory.getLogger(OaServiceApplicationStart.class);
 
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
 
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
@@ -73,6 +77,7 @@ public class OaServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 6 - 0
service-order/src/main/java/com/java110/order/OrderServiceApplicationStart.java

@@ -17,6 +17,7 @@ package com.java110.order;
 
 import com.java110.config.properties.code.ZookeeperProperties;
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.center.DataFlowEventPublishing;
 import com.java110.service.init.ServiceInfoListener;
@@ -43,6 +44,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.scheduling.annotation.EnableAsync;
 
+import javax.annotation.Resource;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.nio.charset.Charset;
@@ -77,6 +79,9 @@ public class OrderServiceApplicationStart {
 
     private static Logger logger = LoggerFactory.getLogger(OrderServiceApplicationStart.class);
 
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
+
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
      *
@@ -87,6 +92,7 @@ public class OrderServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 5 - 1
service-report/src/main/java/com/java110/report/ReportServiceApplicationStart.java

@@ -2,6 +2,7 @@ package com.java110.report;
 
 import com.java110.core.annotation.Java110CmdDiscovery;
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.cmd.ServiceCmdEventPublishing;
 import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing;
@@ -20,6 +21,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -50,7 +52,8 @@ public class ReportServiceApplicationStart {
 
     private static Logger logger = LoggerFactory.getLogger(ReportServiceApplicationStart.class);
 
-
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
      *
@@ -61,6 +64,7 @@ public class ReportServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 5 - 0
service-store/src/main/java/com/java110/store/StoreServiceApplicationStart.java

@@ -16,6 +16,7 @@
 package com.java110.store;
 
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing;
 import com.java110.service.init.ServiceStartInit;
@@ -31,6 +32,7 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -62,6 +64,8 @@ public class StoreServiceApplicationStart {
 
     private final static String LISTENER_PATH = "java110.StoreService.listeners";
 
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
      *
@@ -72,6 +76,7 @@ public class StoreServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 

+ 6 - 0
service-user/src/main/java/com/java110/user/UserServiceApplicationStart.java

@@ -2,6 +2,7 @@ package com.java110.user;
 
 import com.java110.core.annotation.Java110CmdDiscovery;
 import com.java110.core.annotation.Java110ListenerDiscovery;
+import com.java110.core.aop.Java110RestTemplateInterceptor;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.cmd.ServiceCmdEventPublishing;
 import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing;
@@ -18,6 +19,7 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
+import javax.annotation.Resource;
 import java.nio.charset.Charset;
 
 
@@ -47,6 +49,9 @@ public class UserServiceApplicationStart {
 
     private static final String LISTENER_PATH = "java110.UserService.listeners";
 
+    @Resource
+    private Java110RestTemplateInterceptor java110RestTemplateInterceptor;
+
     public static void main(String[] args) throws Exception {
         try {
             ServiceStartInit.preInitSystemConfig();
@@ -69,6 +74,7 @@ public class UserServiceApplicationStart {
     public RestTemplate restTemplate() {
         StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
         RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build(RestTemplate.class);
+        restTemplate.getInterceptors().add(java110RestTemplateInterceptor);
         return restTemplate;
     }
 }