【问题标题】:MassTransit Redirect Messages from the Error Queue来自错误队列的 MassTransit 重定向消息
【发布时间】:2015-10-22 02:15:20
【问题描述】:

我正在浏览一些使用 NServiceBus 的示例,我偶然发现了一个我希望随 MassTransit 提供的功能(因为它是一项免费服务) .

该功能基于“中毒”消息。

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

NServiceBus 有一个很酷的功能,一旦您纠正了代码中的错误,就可以将错误队列中的这些消息“重定向”到原始工作排队,待重新投递

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

MassTransit 是否有类似的工具来解决此类问题?

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

【问题讨论】:

    标签: rabbitmq message-queue masstransit nservicebus5


    【解决方案1】:

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

    您还可以在 RabbitMQ 中创建计划的铲子,并执行消息移动以响应该计划。在 RabbitMQ 中配置铲子的可见性对我们的操作人员来说是无价的,因为他们很少认为 Windows 计划任务(或其他随机调度程序)会做一些像将先前失败的消息移回生产队列一样危险的事情.

    我建议阅读这篇关于 MassTransit 如何处理有害信息的博文:Error Handling in MassTransit with RabbitMQ

    围绕 RabbitMQ 的工具比 MSMQ 提供的任何工具都好得多,这也是我们完全放弃 MSMQ 用于生产队列的原因之一。

    【讨论】:

    • 谢谢克里斯,这很有帮助!
    【解决方案2】:

    只需 RabbitMQ 和一些代码即可轻松重新创建此功能。虽然 NServicebus 包含它很好,但使用 MassTransit 构建它应该很容易。

    (注意:我已经有几年没用过 .NET 了,所以我对 NSB 和 MT 的了解有点生疏……这只是高级答案,没有代码)

    首先要正确配置死信交换和有害消息队列。 https://www.rabbitmq.com/dlx.html

    一旦您知道某条消息导致错误并且是一条错误消息,您就可以拒绝或拒绝(无需重新排队)该消息,以便通过死信交换 (DLX) 发送该消息。

    消息通过 DLX 后,您将在消息上拥有一些附加属性,包括:

    • queue - 消息在死信之前所在的队列的名称,
    • exchange - 消息发布到的交易所(请注意,如果消息多次出现死信,这将是死信交换),
    • routing-keys - 发布消息时使用的路由密钥(包括 CC 密钥,但不包括 BCC 密钥),

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多