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

Rya*_*sch 3 masstransit rabbitmq .net-core opentracing

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

我能够使用 MassTransit 向 RabbitMQ 发布和使用事件,并且 OpenTracing 与 Jaeger 配合使用,但我还没有设法将我的 OpenTracing TraceIds 从我的消息发布者传播到我的消息消费者 - 发布者和消费者跟踪有不同TraceId。

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

cfg.UseDiagnosticsActivity(new DiagnosticListener("test"));
Run Code Online (Sandbox Code Playgroud)

我实际上不确定侦听器名称应该是什么,因此是“test”。该文档没有 OpenTracing 的示例。无论如何,这会在发布端的活动跟踪中添加“发布消息”范围,并在消费者端自动设置“消费消息”跟踪;然而它们是单独的痕迹。我将如何将其合并为单个跟踪?

我可以使用以下方法设置 TraceId 标头:

cfg.ConfigureSend(configurator => configurator.UseExecute(context => context.Headers.Set("TraceId", GlobalTracer.Instance.ActiveSpan.Context.TraceId)))
Run Code Online (Sandbox Code Playgroud)

但是我该如何配置我的消息使用者,使其成为根 TraceId?有兴趣看看我会如何做到这一点,或者是否有不同的方法......

谢谢!

Rya*_*sch 5

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

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

仍然有兴趣听听是否有更好的方法来做到这一点......