Spring RabbitMQ - 消息重新排队限制

时间:2017-01-07 17:36:08

标签: java spring spring-boot spring-amqp spring-rabbit

将Spring-boot和Spring-starter-amqp用于我的消息传递应用程序。我的问题场景是这样的:

第一个问题:我想将我的消息重新排队5次,然后如果发生业务异常,则应该从队列中发出消息(这里我只关注业务异常)。

第二个问题:如果第一个用例是可能的,我们可以根据尝试以某种方式增加重新排队的时间。假设在第一次尝试中发生商业异常,它应该立即重新排队,但在第二次尝试中它应该在2分钟后重新排队然后4分钟然后6分钟然后8分钟然后10分钟像时间将根据尝试增加。

由于

1 个答案:

答案 0 :(得分:0)

对于简单的情况(尝试之间的固定延迟),您可以配置队列以发送被拒绝的消息进行死信交换,并抛出AmqpRejectAndDontRequeueException

将队列绑定到死信交换,并在该队列上设置生存时间(ttl),并使用与原始队列绑定的死信交换进行配置。在TTL过期后,该消息将被重新排队。

您需要检查x-death标头,以确定消息遍历的循环次数。重试结束后,抛出ImmediateAcknowledgeAmqpException以丢弃该消息。

对于可变延迟,您必须自己重新发布消息,进行延迟消息交换(有一个代理插件),每次重试的延迟都会增加。

另见this answer