处理RabbitMQ中的死信

TL; DR:修复了最初导致拒绝消息的使用者代码后,我需要将死信消息“重播”回其原始队列。

我已经为RabbitMQ配置了死信交换(DLX),并且已成功将拒绝的邮件路由到死信队列。但是,现在我想看看死信队列中的消息,并尝试决定如何处理每个消息。一旦解决了有问题的使用者代码,这些消息中的某些(许多?)应重放(重新排队)到其原始队列(可在“ x-death”标头中找到)。但是我实际上该怎么做呢?我是否应该编写一个一次性程序,以从死信队列中读取消息并允许我指定目标队列以将其发送到?那搜索死信队列呢?如果我知道一条消息(假设它是用JSON编码)具有我想要搜索并重播的特定属性,该怎么办?例如,我修复了一个缺陷,该缺陷将使包含PacketId:1234的消息立即成功处理。我还可以为此编写一个一次性程序。

我当然不能成为第一个遇到这些问题的人,我想知道是否还有其他人已经解决了这些问题。似乎应该为这种事情使用某种瑞士军刀。我在Google和Stack Overflow上进行了相当广泛的搜索,但实际上并没有提出太多建议。我能找到的最接近的东西是铁锹,但这似乎并不是工作的正确工具。

德里克·贝利

我是否应该编写一个一次性程序,以从死信队列中读取消息并允许我指定目标队列以将其发送到?

一般来说,是的。

您可以结合使用延迟消息交换插件来设置延迟重试,以将消息重新发送回原始队列

但这只会间隔一定时间自动执行重试,并且在重试发生之前您可能还没有解决问题。

在某些情况下,这是可以的-例如当错误是由暂时不可用的外部资源引起的。

但是,就您的情况而言,我认为您对创建处理死信的应用程序的想法是最好的选择,原因如下:

  • 您需要搜索邮件,这是不可能的RMQ
  • 这意味着您将需要一个数据库来存储来自DLX /队列的消息

因为要将消息从DLX /队列中拉出,所以需要确保从消息中获取所有标头信息,以便可以在时间到时将其重新发布到正确的队列中。

我当然不能成为第一个遇到这些问题的人,我想知道是否还有其他人已经解决了这些问题。

而你不是!

对于这个问题有很多解决方案,这些都归结为您建议的解决方案。

一些较大的“服务总线”实现中内置了此类功能。我相信NServiceBus(或它的SaaS版本)已经内置了这个功能-尽管我不是100%肯定它。

如果您想进一步研究,请搜索“毒药消息”一词-通常是在这种情况下使用的术语。我通过快速搜索在Google上发现了一些东西,这可能会帮助您解决问题:

希望有帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RabbitMQ中的死信死信消息

来自分类Dev

如何一一使用RabbitMQ死信队列中的消息

来自分类Dev

处理死信队列(DLQ)

来自分类Dev

处理死信队列(DLQ)

来自分类Dev

rabbitmq死信队列已删除

来自分类Dev

RabbitMQ Spring死信配置不起作用

来自分类Dev

RabbitMQ:死信还会再次消失吗?

来自分类Dev

RabbitMQ死信交换从未收到消息

来自分类Dev

RabbitMQ是否需要单独进行死信交换?

来自分类Dev

RabbitMQ死信交换从未收到消息

来自分类Dev

您可以在Java嵌入式代理中以编程方式更改队列的“死信”处理吗?

来自分类Dev

如何使用 MassTransit 在 Azure 中为死信队列创建处理程序?

来自分类Dev

Servicestack RabbitMQ:RabbitMqProducer无法在RPC模式中重新声明临时队列时,无限循环填充死信队列

来自分类Dev

带有RabbitMq的Spring amqp:从死信队列中掉下来后,消息没有圈出回到实时队列

来自分类Dev

Servicestack RabbitMQ:RabbitMqProducer无法在RPC模式中重新声明临时队列时,无限循环填充死信队列

来自分类Dev

带有RabbitMq的Spring amqp:从死信队列中消失后,消息没有被圈出回到活动队列

来自分类Dev

骆驼死信通道处理器

来自分类Dev

Pi近似中的死信(java)

来自分类Dev

Excel和RabbitMQ-在Excel中处理RabbitMQ消息吗?

来自分类Dev

在Spring-Boot-RabbitMQ中处理连接

来自分类Dev

处理rabbitmq RPC模型中的异常 - PHP

来自分类Dev

RabbitMQ-计划队列-死信队列-良好实践

来自分类Dev

如何将错误消息移动到rabbitmq死信队列

来自分类Dev

死信箱可以在Akka中重用吗?

来自分类Dev

MSMQ:死信队列中的“签名无效”

来自分类Dev

将死信发送回处理主题的最简单方法?

来自分类Dev

如何处理RabbitMQ中未知/无效的绑定路由键值?

来自分类Dev

在RabbitMQ中,如何处理prefetch和'redelivered'之间的冲突

来自分类Dev

Azure Service Bus中的死信队列中的消息是否过期?

Related 相关文章

  1. 1

    RabbitMQ中的死信死信消息

  2. 2

    如何一一使用RabbitMQ死信队列中的消息

  3. 3

    处理死信队列(DLQ)

  4. 4

    处理死信队列(DLQ)

  5. 5

    rabbitmq死信队列已删除

  6. 6

    RabbitMQ Spring死信配置不起作用

  7. 7

    RabbitMQ:死信还会再次消失吗?

  8. 8

    RabbitMQ死信交换从未收到消息

  9. 9

    RabbitMQ是否需要单独进行死信交换?

  10. 10

    RabbitMQ死信交换从未收到消息

  11. 11

    您可以在Java嵌入式代理中以编程方式更改队列的“死信”处理吗?

  12. 12

    如何使用 MassTransit 在 Azure 中为死信队列创建处理程序?

  13. 13

    Servicestack RabbitMQ:RabbitMqProducer无法在RPC模式中重新声明临时队列时,无限循环填充死信队列

  14. 14

    带有RabbitMq的Spring amqp:从死信队列中掉下来后,消息没有圈出回到实时队列

  15. 15

    Servicestack RabbitMQ:RabbitMqProducer无法在RPC模式中重新声明临时队列时,无限循环填充死信队列

  16. 16

    带有RabbitMq的Spring amqp:从死信队列中消失后,消息没有被圈出回到活动队列

  17. 17

    骆驼死信通道处理器

  18. 18

    Pi近似中的死信(java)

  19. 19

    Excel和RabbitMQ-在Excel中处理RabbitMQ消息吗?

  20. 20

    在Spring-Boot-RabbitMQ中处理连接

  21. 21

    处理rabbitmq RPC模型中的异常 - PHP

  22. 22

    RabbitMQ-计划队列-死信队列-良好实践

  23. 23

    如何将错误消息移动到rabbitmq死信队列

  24. 24

    死信箱可以在Akka中重用吗?

  25. 25

    MSMQ:死信队列中的“签名无效”

  26. 26

    将死信发送回处理主题的最简单方法?

  27. 27

    如何处理RabbitMQ中未知/无效的绑定路由键值?

  28. 28

    在RabbitMQ中,如何处理prefetch和'redelivered'之间的冲突

  29. 29

    Azure Service Bus中的死信队列中的消息是否过期?

热门标签

归档