弹簧-云-侦探 通过带有兔子mq-binder的弹簧云流跟踪:如何完成跟踪



我已经使用带有RabbitMQ-binders和spring-cloud-sleuth的spring-cloud-stream设置了一个演示项目。

dependencies {
    annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" // for @ConfigurationProperties, make sure compileJava.dependsOn(processResources)
    compile 'org.springframework.boot:spring-boot-starter-security'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.cloud:spring-cloud-starter-config'
    compile 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
    compile "org.springframework.boot:spring-boot-starter-web-services" // I also have some REST endpoints
    compile 'org.springframework.cloud:spring-cloud-stream-binder-rabbit'
}

我有一个预定的春云流源:

@Scheduled(fixedDelay = 2500, initialDelay = 500)
@HystrixCommand(fallbackMethod = "fallbackTimerMessageSource")
@SendTo(SourceChannels.OUTPUT)
public void timerMessageSource() {
     ...

然后是中间层,类似于最终的接收器层,如下所示:

@Autowired
private Tracer sleuthTracer;

@StreamListener(SinkChannels.INPUT)
public void sinked(MessageDTO payload) {
    logger.info("[{}]sinked by {} with '{}'", instanceIndex, Sink.class.getSimpleName(), payload);
    ...

我很好地看到 TraceId 和 SpanId 自动通过所有进程的 RabbitMQ 队列,直到日志文件中的接收器进程:

2018-03-20 20:55:10.580  INFO [circuitbreakers_sink,820fcab9830191c7,a388974ea57dac3a,true] 43379 --- [k27JdIWK8axsQ-1] c.d.minimal.circuitbreaker.sinks.Sink    : [0]sinked by Sink with 'Tue Mar 20 20:55:06 CET 2018 MESSAGE: 'fromSource transformed by tier1 transformed by tier2' modifiers: ' modBy:tier1:i0 modBy:tier2:i0''

因此,此时,最终接收器层希望(显式(发出信号,表明此跟踪(我的业务流程实例(已在此处finish

如何发出整个跟踪已完成的信号?

我只找到了sleuthTracer.currentSpan().finish();但这只完成了跨度......没有明确发出信号,整个跟踪已在此处完成。

我错过了什么吗?(对齐普金来说很新,勇敢和侦探(

zipkin中没有痕迹整理的概念。跟踪中的跨度可以开始和结束。我们不会在不同的主机上开始和停止跨度,因此未完成的跨度可能是偶然的。如果您喜欢,可以在这里聊天 https://gitter.im/spring-cloud/spring-cloud-sleuth