1

发生异常时是否有记录消息内容?

我查看了各种日志记录扩展,但它们只是记录 CorrelationId。并且消息内容不可用。

MessageContext 中有一个 CurrentMessge 属性,但在记录器写入异常时该属性不可用。

我试图处理 PoisonMessage 事件,它允许我记录消息内容。

public static void OnPoisonMessage(IBus bus, ReceivedTransportMessage receivedTransportMessage, Rebus.Bus.PoisonMessageInfo poisonMessageInfo) {

var message =  new JsonMessageSerializer().Deserialize(receivedTransportMessage);
    Log.Error("{@messageType} failed {@message}", message.Messages[0].GetType(), message);
}

这很好用,但是现在我在日志中有两个错误,一个来自我的处理程序,另一个来自记录器。

我想知道是否有更好的方法来处理这个要求。

4

1 回答 1

0

如果您的要求是将消息内容简单地记录为 JSON,我认为您已经找到了正确的方法 - 至少我会这样做。

我很好奇您通过记录消息内容解决了什么问题 - 您知道失败的消息最终会出现在您可以检查的错误队列中吗?

如果您使用的是 MSMQ,则可以使用Rebus 的 Snoop-tool来检查 JSON 序列化消息,这是一个简单的 MSMQ 检查器。它还允许您将消息移回失败的输入队列(“返回源队列”)

监视 Rebus 安装的一个好方法是在错误队列中出现某些内容时设置某种警报,然后您可以查看消息(哪个事件包括在特殊标头中捕获的异常),然后从那里。

于 2014-10-15T14:05:08.813 回答