Sleuth是一个开源的分布式追踪解决方案,与Spring Cloud一起使用,用于收集和跟踪分布式系统中请求的调用链路信息。它可以帮助开发人员定位和解决分布式系统中的性能问题和故障。
Sleuth是Spring Cloud提供的一个分布式追踪工具,它基于Zipkin实现,为微服务架构提供了全链路的请求跟踪和监控功能。Sleuth通过生成和传播唯一的Trace ID和Span ID, 可以在分布式系统中跟踪请求的调用链路,记录各个组件的耗时和性能指标,并将这些信息发送到追踪服务器进行存储和分析。Sleuth与Spring Cloud集成紧密, 可以方便地与其他Spring Cloud组件一起使用,如Eureka、Ribbon、Feign等。
那么sleuth是怎么与spring cloud集成的 如果debug调试代码,会发现每次调用FeignContext的实例地方,实际返回的都是TraceFeignContext。
仔细看了sleuth源码里面的web/client/feign里面的代码,会发现有一个FeignContextBeanPostProcessor 这就是bean的后置处理器。 看到这里就明朗了。看看具体实现
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
if (bean instanceof FeignContext && !(bean instanceof TraceFeignContext)) {
return new TraceFeignContext(traceFeignObjectWrapper(), (FeignContext) bean);
}
return bean;
}
这是bean的后置处理器。判断如果bean是FeignContext实例,都在外面包了一层,返回TraceFeignContext。