不同的死亡

给定一个基本的MessageListener实现,它使用来自RabbitMQ队列的消息,如何根据处理它时可能引发的异常类型将消息发送到不同的死信队列?

队列中最初发布的消息具有x-dead-letter-exchangex-dead-letter-routing-key设置,但在我的情况下这还不够。

如果它很重要,我的应用程序正在使用Spring 4和Spring Amqp。


据我了解RabbitMQ文档和Spring AMQP,不可能根据代码内部的条件向不同的DLQ发送消息。 我这样说的原因是,我从调试代码的理解是,当消息必须发送到DLQ时,代码不指定交换或路由密钥,而RabbitMQ使用消息发布时定义的那些密钥。

所以,我发现的唯一解决方案是实现这样的东西:

try { try_to_do_useful_stuff(message); } catch (BusinessException e) { resend_the_message_to_business_dlq(message); }

这样,如果引发业务异常,则将该消息手动发送到业务DLQ。 当然,有些细节会丢失,比如始发队列,但如果它们不被使用,这不是问题。

当引发非业务异常时,遵循标准路径:重试(如果已配置),然后路由到定义的DLQ。

链接地址: http://www.djcxy.com/p/59643.html

上一篇: Different dead

下一篇: Spring AMQP: would like to put message to queue and send ACK immediately