rabbitmq能做延迟队列?你GET到了吗

关于rabbitmq基础概念需要复习的请搜索之前的文章。

通过设置消息生存时间(ttl),借助死信队列作为延迟队列

实现其实不困难,只要理解原理就懂了。创建队列时可以借助header头设置消息生存时间、死信Exchange、以及死信队列路由key(可选),代码如下

1
2
3
4
5
6
public Queue directQueue() { 
return QueueBuilder.durable(QUEUE_NAME)
.deadLetterExchange(DEAD_LETTER_EXCHANGE_NAME)
.ttl(1000 * 40).deadLetterRoutingKey(DEAD_LETTER_ROUTING_KEY)
.build();
}

我们设置的是40秒有效,当消息进入队列后进行倒数(可不能直接监听该队列进行消费,不然就没效果了。),当倒计时结束后消息后被重新投递到死信Exchange中,然后会重新路由到死信队列,此时可以直接监听消费死信队列即可完成消息延时。

此处应该有代码参照:点我直达

借助第三方插件实现延时队列功能

这个没有找到合适的插件包,这里就不详解了,有需要可以自己查一下。