【发布时间】:2018-02-22 00:23:42
【问题描述】:
我正在使用 MassTransit 3.5.7。我在启动总线之前添加了相关ID:
MessageCorrelation.UseCorrelationId<ICustomerRegistered>(x => x.CustomerGuid);
MessageCorrelation.UseCorrelationId<ICustomerUpdated>(x => x.Customer.Guid);
MessageCorrelation.UseCorrelationId<IOrderPaid>(x => x.OrderGuid);
MessageCorrelation.UseCorrelationId<IOrderPaymentAuthorized>(x => x.OrderGuid);
MessageCorrelation.UseCorrelationId<IOrderPlaced>(x => x.Order.OrderGuid);
MessageCorrelation.UseCorrelationId<IOrderRefunded>(x => x.OrderGuid);
我使用 Serliog 2.5.0 进行日志记录:
Bus.Factory.CreateUsingAzureServiceBus(serviceBus =>
{
serviceBus.UseSerilog();
...
}
我可以看到 CorrelationId 已添加到消息标头中,但它没有作为自定义属性添加到日志中。
我需要做什么才能记录所有已记录消息的 CorrelationId?
更新:
我实现了一个 Serilog 丰富器和一个像 here 这样的 MassTransit 自定义中间件,但相关 id 只记录在接收的(消费的)消息中。发布消息时不记录。有谁知道发布消息时如何记录相关 ID?
【问题讨论】:
-
我对公共交通不太熟悉。但我查看了他们的Serilog integration code,它似乎没有提供任何捕获相关 ID 的方法。也许您可以编写一些custom middleware 来获取相关ID 并使用enrichment 将相关ID 添加到记录的事件中?
-
啊,好像有人有done just that。
-
@mason,感谢您的帮助。我找到了那个要点并试图实现它,但我认为他正在尝试解决一个不同的问题。他没有在 MassTransit 中设置 CorrelationId,但他正在设置来自 http 请求的自定义 Guid(实际上是代码中的 Guid.NewGuid())。我需要使用 MassTransit 中设置的 CorrelationId。
-
嗯 .. 在查看了更多代码之后,我认为这可能是我需要的。明天我将再次尝试实施。再次感谢。
-
@mason 我试图从要点中实现代码,但相关 id 仅添加到消费的消息中。它不会添加到已发布的消息中。我在服务总线配置上调用了 UseSeriLogEnricher 方法,不仅在接收端点上,而且我仍然只在消费的消息上获得相关 ID。有什么想法吗?
标签: masstransit serilog