是否有异常发生时记录消息内容?
我查看了各种日志记录扩展,但它们只记录了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);
}
这很好用,但是现在我在日志中有两个错误,一个来自我的处理程序,另一个来自logger。
我想知道是否有更好的方法来处理这个要求。
答案 0 :(得分:0)
如果你的要求是简单地将消息内容记录为JSON,我认为你已经找到了正确的方法 - 至少就像我做的那样。
我很好奇你通过记录邮件内容解决了什么问题 - 你知道失败邮件最终会出现在你可以查看的错误队列中吗? / p>
如果您正在使用MSMQ,则可以使用Rebus' Snoop-tool检查JSON序列化消息,{{3}}是一个简单的MSMQ检查器。它还允许您将消息移回到失败的输入队列中("返回源队列")
监控Rebus安装的一个好方法是在某些内容到达错误队列时设置某种警报,然后您可以查看该消息(哪个事件包含特殊标头中捕获的异常)然后解决那里的情况。