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 Boot打成jar包后,读取resources目录下的文件
Spring Boot打成jar包后,读取resources目录下的文件
2
React Native学习之AsyncStorage API
React Native学习之AsyncStorage API
3
支付宝小程序网络 API 使用注意事项
支付宝小程序网络 API 使用注意事项
4
Spring Cloud消息总线RabbitMQ方式
Spring Cloud消息总线RabbitMQ方式
5
Prometheus + Grafana 使用 redis_exporter 监控 Redis
Prometheus + Grafana 使用 redis_exporter 监控 Redis
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。