我有一个服务A创建一封电子邮件并将其发送给客户。客户将收到电子邮件,并最终点击正文中的链接触发服务B.spring cloud sleuth:手动触发的异步服务
如何关联两个不同且完全隔离的服务,这些服务与sleuth是同一业务流程的一部分?
我应该离开跨度“打开”还是有办法以某种方式在邮件中“嵌入”跟踪ID?
我有一个服务A创建一封电子邮件并将其发送给客户。客户将收到电子邮件,并最终点击正文中的链接触发服务B.spring cloud sleuth:手动触发的异步服务
如何关联两个不同且完全隔离的服务,这些服务与sleuth是同一业务流程的一部分?
我应该离开跨度“打开”还是有办法以某种方式在邮件中“嵌入”跟踪ID?
您可以使用异步通信(http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_asynchronous_communication),例如通过名为TraceableExecutorService
(http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_executor_executorservice_and_scheduledexecutorservice)的ExecutorService
的跟踪表示。你发出一个可以完成的未来,将在一个单独的线程中处理数据。在某个时候你阻止,然后你可以检索数据。跟踪表示ExecutorService
将跟踪传递跟踪数据。
更新: 但是,如果这些完全是两个独立的过程,那么我会关闭跨度,并在有人点击链接时创建一个完全独立的跨度。你不应该明确地打开跨度。绑定2个进程的将是跟踪标识。从UI的角度来看,Zipkin尚不能以最好的方式支持这些长时间的生活任务,但还有一些工作正在进行中(通过所谓的链接跨度)来改进它(
)正是这些是两个完全分开的服务,因此,完全理解绑定它们的是跟踪标识。唯一的问题是,我不确定如何传递跟踪ID,因为第二项服务是由用户从电子邮件正文的链接随机触发的。这不是一种典型的微服务范例,您可以在这些范例中有服务互相交流或对数据管道作出反应。这些服务完全无关,但它们应该在日志中显示相同的跟踪标识。 – pgs
您必须将此信息存储在某处 - 不幸的是:没有其他方式,/可以在电子邮件链接中传递(hashed?)traceid? –
这是我第一次猜测。在这种情况下,我真的需要存储或传递它。您会建议您在整个代码中声明使用跟踪和跨度,而不是依赖注释和执行程序吗? – pgs