rabbitmq延迟队列实现
生活随笔
收集整理的這篇文章主要介紹了
rabbitmq延迟队列实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
延遲隊列
Rabbitmq并沒有延遲隊列
但是:死信隊列+消息時間設置過期時間可以 達成我們想要的延遲隊列效果例如下單5分鐘之內未支付就會取消訂單,那么設置下單支付時間為5分鐘后過期然后進入死信隊列,一旦進入死信隊列那么就自動取消訂單
代碼
消費者:
創建死信隊列
這個死信隊列 專門存放未支付訂單的消息
創建訂單過期時間
@Configuration public class ttlconsumer {@Beanpublic DirectExchange directExchange(){return new DirectExchange("ttl.direct.Exchange",true,false);}@Beanpublic Queue abcQueue(){HashMap<String, Object> args = new HashMap<>();args.put("x-message-ttl",5000);//5秒args.put("x-dead-letter-exchange","dlx.direct.Exchange");args.put("x-dead-letter-routing-key","dead");return new Queue("ding.dan.Queue",true,false,false,args);}@Beanpublic Binding abcBinding(){return BindingBuilder.bind(abcQueue()).to(directExchange()).with("ttl");} }測試
@SpringBootTest class SpringBootRabbitmqSixingduilieApplicationTests {@Autowiredprivate ttlproducer ttlproducer;@Testvoid contextLoads() {ttlproducer.makeTest("下單","...");} }
我們可以去web界面看
訂單超時時間設置的是5秒過期時間
看看我們過期的消息是否進入到死信隊列
其實上面的死信隊列已經起到了延遲隊列的作用
5秒內如果消費不了就會轉投到死信隊列里
總結
以上是生活随笔為你收集整理的rabbitmq延迟队列实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ的TTL+死信队列 看完
- 下一篇: docker快速搭建RabbitMQ集群