3

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

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

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

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

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

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

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

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

谢谢!

4

1 回答 1

4

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

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

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

于 2019-05-15T07:07:09.410 回答