spring 云侦探:手动触发的异步服务

spring cloud sleuth: manually triggered async services

我有一个创建电子邮件并将其发送给客户的服务 A。客户将收到电子邮件,并最终单击正文中的 link 以触发服务 B。

如何将属于同一业务流程的两个不同且完全隔离的服务与 sleuth 相关联?

我应该保留跨度 "opened" 还是有办法 "embed" 以某种方式在电子邮件中显示跟踪 ID?

您可以使用异步通信 (http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_asynchronous_communication) for example via a trace representation of the ExecutorService called the TraceableExecutorService (http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_executor_executorservice_and_scheduledexecutorservice)。您发出一个可完成的未来,它将在一个单独的线程中处理数据。在某些时候你阻止然后你可以检索数据。 ExecutorService 的跟踪表示将负责跟踪数据的传递。

更新: 但是,如果这完全是两个独立的进程,那么我将关闭跨度并在有人单击 link 时创建一个完全独立的跨度。你永远不应该让 span 显式打开。将绑定这 2 个进程的将是跟踪 ID。从 UI 的角度来看,Zipkin 还没有以最好的方式支持这些长期存在的任务,但正在进行一些改进工作(通过所谓的 linked spans )