我正在使用 NServiceBus 进行一些示例,我偶然发现了一个我希望发布 MassTransit 的功能(因为它是免费服务)
该功能基于'中毒'消息。
如果由于您系统中的错误而导致这些消息无法处理,并永久停留在错误队列中。
NServiceBus 有一个很酷的功能,一旦您纠正了代码中的错误,就可以将错误队列中的这些邮件“重定向”恢复到原来的工作状态排队,重新传递。
这是通过使用NServiceBus特定工具完成的: - ReturnToSourceQueue.exe 。
MassTransit是否有针对此类问题的类似工具?
或者是否有另一种可用的解决方法,最好是与RabbitMQ一起使用。
答案 0 :(得分:6)
使用RabbitMQ,可以轻松地在队列之间移动消息。您可以使用管理控制台通过安装shovel
插件手动执行此操作。
您还可以在RabbitMQ中创建已安排的铲子,并执行消息移动以响应该计划。在RabbitMQ中配置铲子的可见性对我们的操作人员来说是非常宝贵的,因为他们很少认为Windows计划任务(或其他随机调度程序)会像将先前失败的消息移回生产队列那样冒险
我建议阅读这篇关于MassTransit如何处理有毒邮件的博文:Error Handling in MassTransit with RabbitMQ
围绕RabbitMQ的工具比MSMQ提供的任何东西都要好得多,这也是我们完全放弃MSMQ进行生产排队的原因之一。
答案 1 :(得分:2)
只需使用RabbitMQ和一些代码即可轻松重新创建此功能。虽然NServicebus包含它很好,但使用MassTransit构建它应该很容易。
(注意:我几年没用过.NET了,所以我对NSB和MT的了解有点生疏...这只是高级答案,没有代码)
首先,是死信交换和毒药消息队列的正确配置。 https://www.rabbitmq.com/dlx.html
一旦您知道某条消息导致错误并且是一条错误消息,您就可以拒绝或拒绝(没有重新排队)该消息,以便通过死信交换(DLX)发送消息。
一旦消息通过DLX,您将在消息上有一些其他属性,包括:
会有更多,但这些是你想要注意的事情。通过检查邮件上的这些属性,您可以使用原始路由密钥通过原始交换机重新发送原始邮件。或者,您可以直接重新发送到原始目标队列...我认为通过交换发送会更好,个人,因为原始队列可能不再存在(取决于系统配置,消费者创建独占队列等)。
使用此信息,重新创建功能集应该不会太困难。 rabbitmq提供了您需要的所有功能,您只需编写一些代码即可充分利用它。