使用 MassTransit.RabbitMQ 将 OpenTracing TraceIds 从发布者传播到消费者

propagate OpenTracing TraceIds from publisher to consumer using MassTransit.RabbitMQ

使用 MassTransit.RabbitMQ v5.3.2 和 OpenTracing.Contrib.NetCore v0.5.0。

我可以使用 MassTransit 向 RabbitMQ 发布和使用事件,并且我已经将 OpenTracing 与 Jaeger 一起使用,但是我还没有设法让我的 OpenTracing TraceIds 从我的消息发布者传播到我的消息消费者 - 发布者和消费者跟踪具有不同的 TraceId。

我已使用以下过滤器配置 MassTransit:

cfg.UseDiagnosticsActivity(new DiagnosticListener("test"));

我不确定监听器名称应该是什么,因此 "test"。 documentation 没有 OpenTracing 的示例。无论如何,这会在发布端的活动跟踪中添加一个 'Publishing Message' 跨度,并在消费者端自动设置一个 'Consuming Message' 跟踪;但是它们是单独的痕迹。我将如何将其合并为一条轨迹?

我可以设置 TraceId header 使用:

cfg.ConfigureSend(configurator => configurator.UseExecute(context => context.Headers.Set("TraceId", GlobalTracer.Instance.ActiveSpan.Context.TraceId)))

但是我将如何配置我的消息使用者以便这是根 TraceId?有兴趣了解我如何做到这一点,或者是否有不同的方法...

谢谢!

如果有人感兴趣;我最终通过创建一些发布和使用 MassTransit 中间件来分别通过跟踪注入和提取进行跟踪传播来解决这个问题。

我已将解决方案放在 GitHub - https://github.com/yesmarket/MassTransit.OpenTracing

仍然有兴趣听听是否有更好的方法...