1. 概述
由于公司是分布式架构,很多个微服务之间会互相调用,这个日志框架引用后,发现每个应用中的traceId只存在自己的应用中,没有互相串联起来。
2. 项目修改
在plumelog-trace的包中添加几个文件
package com.plumelog.trace.openfeign;
import com.plumelog.core.TraceId;
import com.plumelog.core.util.StringUtils;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import static com.plumelog.core.constant.LogMessageConstant.TRACE_ID;
/**
* @author YIJIUE
*/
public class FeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
String traceId = TraceId.logTraceID.get();
if (StringUtils.isNotEmpty(traceId)) {
requestTemplate.header(TRACE_ID, traceId);
}
}
}
package com.plumelog.trace.openfeign;
import feign.RequestInterceptor;
import org.springframework.context.annotation.Bean;
public class TraceIdBean {
@Bean
public RequestInterceptor traceIdInterceptor() {
return new FeignInterceptor();
}
}
pom.xml添加架包
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>11.1</version>
<scope>provided</scope>
</dependency>
在各个项目中的@FeignClient注解添加如下配置,就可以使用了
@FeignClient(name = "", configuration = TraceIdBean.class)