我正在开发RabbitMQ集成。我有一个微服务,它接收来自其他服务的消息。我目前正在研究如何处理在处理过程中遇到异常的消息。
情景可能是:
关于发布商退货,我碰到了Spring AMQP documentation,但我无法完全理解上下文。我想知道这是如何工作的,如果这可以成为解决上述第4项的解决方案。或者还有其他解决方案吗?
提前谢谢!
答案 0 :(得分:3)
对于列表中的#4,解决方案非常简单 - 不要自动确认消息,而是在处理完成时确认。以这种方式 - 如果客户端(订户)在处理消息期间(由于某种原因)死亡,那么该消息将被重新排队(因此将其发送给ServiceA以便在您的情况下进行重新处理)。
如果您想明确重新排列邮件,可以执行否定确认(搜索here)。
在任何重新排队(手动或自动)的情况下,您应小心导致订阅者死亡的单个消息不会被订阅者永久处理,是 - 确保处理期间发生的异常是随机的,而不是保证的事件。这样的示例是包含无效XML的消息 - 您处理它,看到它无效,处理异常并重新排队,但是再一次(或相同)订户获取它,并处理相同的异常,因为内容的消息及其中的XML 没有改变等等......