Spring Cloud手动创建Feign客户端后zipkin调用链断层问题解决

Spring Cloud下通过手动创建Feign客户端进行服务间调用,导致zipkin调用链被截断,traceId不能延续导致调用链断层

解决方案:为Feign.Builder添加请求拦截器,加入请求头X-B3-TraceIdX-B3-SpanId,值为traceIdStringspanIdString

ChannelGatewayPayApi channelGatewayPayApi;
if ((channelGatewayPayApi = channelGatewayApiMap.get(channelInfo.getChnlCode())) == null) {
    channelGatewayPayApi = feignConfig.getFeignBuilder()
            .requestInterceptor(p -> {
                p.header("X-B3-TraceId", TraceHelper.getTraceIdString());
                p.header("X-B3-SpanId", TraceHelper.getSpanIdString());
                p.header("X-B3-Sampled", String.valueOf(TraceHelper.getSampled()));
                log.info("ChannelPayService.cancel TraceId: {}, SpanId: {}", TraceHelper.getTraceIdString(), TraceHelper.getSpanIdString());
            }).target(ChannelGatewayPayApi.class, "http://" + channelProduct.getServiceAppName());
    channelGatewayApiMap.put(channelInfo.getChnlCode(), channelGatewayPayApi);
    channelGatewayMap.put(channelInfo.getChnlCode(), channelProduct.getServiceAppName().substring(channelProduct.getServiceAppName().indexOf("gateway") + 8));
}
上一篇 Spring Cloud Feign请求拦截器和日志
下一篇 Spring Boot通过名称获取bean(applicationContext)
目录
文章列表
1 Spring Security OAuth2 JWT 认证服务器配置
Spring Security OAuth2 JWT 认证服务器配置
2
携程Apollo服务端部署与操作
携程Apollo服务端部署与操作
3
以太坊学习5:Geth命令行环境
以太坊学习5:Geth命令行环境
4
Python中创建字典的几种方法
Python中创建字典的几种方法
5
Logstash排除字段及字段内容
Logstash排除字段及字段内容
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。