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

时间:2019-05-09 07:39:26

标签: .net-core rabbitmq masstransit opentracing

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

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

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

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

我实际上不确定应该使用的侦听器名称,因此无法确定为“测试”。 documentation没有OpenTracing的示例。无论如何,这会在发布端的活动跟踪中添加“发布消息”跨度,并在用户端自动设置“消费消息”跟踪;但是它们是分开的痕迹。我将如何将其整合到单个跟踪中?

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

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

但是我该如何配置我的消息使用方,使其成为根TraceId?有兴趣看看我该怎么做,或者是否有其他方法...

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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