MassTransit重定向错误队列中的消息

时间:2015-07-30 15:54:02

标签: rabbitmq message-queue masstransit nservicebus5

我正在使用 NServiceBus 进行一些示例,我偶然发现了一个我希望发布 MassTransit 的功能(因为它是免费服务)

该功能基于'中毒'消息。

如果由于您系统中的错误而导致这些消息无法处理,并永久停留在错误队列中。

NServiceBus 有一个很酷的功能,一旦您纠正了代码中的错误,就可以将错误队列中的这些邮件“重定向”恢复到原来的工作状态排队,重新传递

这是通过使用NServiceBus特定工具完成的: - ReturnToSourceQueue.exe

MassTransit是否有针对此类问题的类似工具?

或者是否有另一种可用的解决方法,最好是与RabbitMQ一起使用。

2 个答案:

答案 0 :(得分:6)

使用RabbitMQ,可以轻松地在队列之间移动消息。您可以使用管理控制台通过安装shovel插件手动执行此操作。

Move Messages

您还可以在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,您将在消息上有一些其他属性,包括:

  • queue - 消息在死信之前所处的队列名称,
  • 交换 - 消息发布的交换(请注意,如果消息多次被删除,这将是一个死信交换),
  • routing-keys - 消息发布时的路由密钥(包括CC密钥但不包括BCC密钥),

会有更多,但这些是你想要注意的事情。通过检查邮件上的这些属性,您可以使用原始路由密钥通过原始交换机重新发送原始邮件。或者,您可以直接重新发送到原始目标队列...我认为通过交换发送会更好,个人,因为原始队列可能不再存在(取决于系统配置,消费者创建独占队列等)。

使用此信息,重新创建功能集应该不会太困难。 rabbitmq提供了您需要的所有功能,您只需编写一些代码即可充分利用它。

相关问题