Spring Cloud Sleuth消息追踪原理

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】
免费领取 2000+ 道 Java 面试题

发博词

是Spring Cloud Sleuth的原理不是zipkin的原理。

追踪原理

Spring Cloud Sleuth可以追踪10种类型的组件,async、Hystrix,messaging,websocket,rxjava,scheduling,web(Spring MVC Controller,Servlet),webclient(Spring RestTemplate)、Feign、Zuul。下面是常用的八种类型。

Scheduled

原理是AOP处理Scheduled注解
TraceSchedulingAspect可以带出,只要是在IOC容器中的Bean带有@Scheduled注解的方法的调用都会被sleuth处理。

Messaging

原理是基于spring messaging的ChannelInterceptor。
TraceChannelInterceptor/IntegrationTraceChannelInterceptor
MessagingSpanTextMapExtractor和MessagingSpanTextMapInjector

Hystrix

原理是使用HystrixPlugins添加trace相关的plugin,自定义了一个HystrixConcurrencyStrategy的实现SleuthHystrixConcurrencyStrategy
具体参考TraceCommand和SleuthHystrixConcurrencyStrategy

Feign

原理是实现了两个Feign Client实例,一个不带Ribbon TraceFeignClient、一个带Ribbon,TraceLoadBalancerFeignClient
TraceFeignAspect AOP里面的逻辑是,有地方想获取Client实例,就拦截返回自己封装的Client。

Async

@Async注解和ThreadPoolTaskExecutor下面的类
具体参看TraceAsyncAspect

RestTempate

原理是spring client的Interceptor机制。具体参看TraceRestTemplateInterceptor。

Zuul

原理是zuul的Filter机制,ZuulFilter
实现了三个TracePreZuulFilter、TracePostZuulFilter两个Filter。

示例代码

示例代码提供了上述八种组件的追踪示例,项目结构如下:

  1. zipkin stream server
  2. eureka server
  3. Segment1[定时消息->消息中间件->监听消息中间件->feign+hystrix->feign+hystrix]
    ->Segment2[controller+async+webclient,controller2(让zuul调用)]->Segment3[zuul]

具体请查看示例代码:
github spring-cloud-sleuth-samples

注意:
zipkin stream server 的${spring.sleuth.stream.group}配置需要放到外部指定,不然不管用。
spring.kafka.consumer.group-id=xxx,内外配置都不管用
spring.cloud.stream.bindings.seluth.group=xxx ,内外配置都不管用
spring.sleuth.stream.group=xxx,在内配置不管用,在外配置管用
具体原因参看:StreamEnvironmentPostProcessor


来源:http://ddrv.cn/a/88268

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » Spring Cloud Sleuth消息追踪原理

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏