“发布者返回”如何在Spring AMQP中发生/工作?

时间:2016-05-11 09:09:09

标签: rabbitmq amqp spring-amqp

我正在开发RabbitMQ集成。我有一个微服务,它接收来自其他服务的消息。我目前正在研究如何处理在处理过程中遇到异常的消息。

情景可能是:

  1. ServiceA将消息发送到引擎的队列。
  2. 引擎处理收到的消息。
  3. 在处理过程中,引擎遇到异常(例如NullPointerException)
  4. 引擎将消息返回给ServiceA以进行重新处理
  5. ServiceA保留消息,直到解决引擎中的异常(重新发送到引擎可以手动触发)。
  6. 关于发布商退货,我碰到了Spring AMQP documentation,但我无法完全理解上下文。我想知道这是如何工作的,如果这可以成为解决上述第4项的解决方案。或者还有其他解决方案吗?

    提前谢谢!

1 个答案:

答案 0 :(得分:3)

对于列表中的#4,解决方案非常简单 - 不要自动确认消息,而是在处理完成时确认。以这种方式 - 如果客户端(订户)在处理消息期间(由于某种原因)死亡,那么该消息将被重新排队(因此将其发送给ServiceA以便在您的情况下进行重新处理)。

如果您想明确重新排列邮件,可以执行否定确认(搜索here)。

在任何重新排队(手动或自动)的情况下,您应小心导致订阅者死亡的单个消息不会被订阅者永久处理,是 - 确保处理期间发生的异常是随机的,而不是保证的事件。这样的示例是包含无效XML的消息 - 您处理它,看到它无效,处理异常并重新排队,但是再一次(或相同)订户获取它,并处理相同的异常,因为内容的消息及其中的XML 没有改变等等......