我使用带有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'
}
我有一个预定的spring-cloud-stream源:
@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
编辑。
我如何表示整个Trace已经完成?
我只找到sleuthTracer.currentSpan().finish();
,但这只完成了Span ...没有明确表示,整个跟踪在这里完成。
我错过了什么吗? (拉链,勇敢和侦探很新)
答案 0 :(得分:0)
拉链中没有任何痕迹整理的概念。跟踪中的跨度可以开始和结束。我们不会在不同的主机上启动和停止跨度,因此未完成的跨度可能是偶然的。如果您喜欢https://gitter.im/spring-cloud/spring-cloud-sleuth
,可以在此处聊天