我正在使用CustomFaultManager处理失败的消息,因此可以在将它们放入错误队列之前对其进行处理。
在
void IManageMessageFailures.ProcessingAlwaysFailsForMessage(TransportMessage message, Exception e)
{
我得到了TransportMessage,并且我必须从以下类型获得类型:
var header = message.Headers["NServiceBus.EnclosedMessageTypes"];
var messageType = MessageTypes.Where(x => x.AssemblyQualifiedName != null
&& header.Contains(x.AssemblyQualifiedName)).ToList();
然后将我的自定义逻辑应用于解压缩消息(因为我正在压缩大型msmq消息)。是否可以在此方法中获得一条消息,就像我在
Handle
方法中拥有的原始消息一样?为什么这困扰我? 现在,我需要记住,每当我更改序列化方法或zipping方法时,都应在自定义错误处理程序中应用更改。
如果可以将TransportMessage强制转换为自定义消息实现,我将很高兴:
var myMessage = message as MyCustomMessage;
您是否知道有没有办法在NServiceBus中进行自定义错误处理而不进行手动反序列化?
我尝试强制转换为我的消息类型(如上所述),但结果始终使我为null,因为消息在
Message
的TransportMessage
字段中序列化了
最佳答案
我们还在使用较旧版本的NServiceBus(3.x)。到目前为止,我们的解决方案是让消息处理程序捕获所有异常,然后将它们包装在一个自定义异常中,该异常包含我们从消息中需要的值。然后,我们将此异常抛出以供NServiceBus处理。
在IManageMessageFailures.ProcessingAlwaysFailsForMessage
实现中,我们基于Exception类型以及NServiceBus.EnclosedMessageTypes值调用适当的错误处理程序。
希望这可以帮助。
关于c# - NServiceBus自定义错误处理TransportMessage反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32442849/