gpt4 book ai didi

c# - NServiceBus自定义错误处理TransportMessage反序列化

转载 作者:行者123 更新时间:2023-12-03 07:54:09 25 4
gpt4 key购买 nike

我正在使用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,因为消息在 MessageTransportMessage字段中序列化了

最佳答案

我们还在使用较旧版本的NServiceBus(3.x)。到目前为止,我们的解决方案是让消息处理程序捕获所有异常,然后将它们包装在一个自定义异常中,该异常包含我们从消息中需要的值。然后,我们将此异常抛出以供NServiceBus处理。

IManageMessageFailures.ProcessingAlwaysFailsForMessage实现中,我们基于Exception类型以及NServiceBus.EnclosedMessageTypes值调用适当的错误处理程序。

希望这可以帮助。

关于c# - NServiceBus自定义错误处理TransportMessage反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32442849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com