相關知識
什麼是延遲隊列
隊列中的消息在等待指定時間後,消費者才能夠進行消費。
應用場景
商城系統,下單後半個小時未付款,自動取消訂單
實現方式
RabbitMQ 本身沒有直接支持延遲隊列功能,但是通過控制消息的生存時間及死信隊列,可以模擬出延遲隊列的效果。
RabbitMQ 控制消息的生存時間有兩種方法:
- 設置隊列屬性(x-message-ttl),隊列中所有消息都有相同的過期時間
- 設置消息屬性(expiration),擁有單獨的過期時間
關於死信隊列可以參考 https://gitee.com/gongm_24/spring-boot-tutorial/tree/master/chapter18
目標
整合 Spring boot 提供的 spring-boot-starter-amqp,實現延遲隊列
操作步驟
添加依賴
引入 Spring Boot Starter 父工程
添加 spring-boot-starter-amqp 的依賴
添加後的整體依賴如下
編碼(發送方)
配置
定義隊列
定義一個測試隊列 TestDeadQueue,併為該隊列配置死信隊列,配置的方法就是在聲明隊列的時候,添加參數 x-dead-letter-exchange 及 x-dead-letter-routing-key,其實就是在消費失敗時,將消息使用該 exchange 及 routing 發送至指定隊列
測試發送
源碼地址
本章源碼 : https://gitee.com/gongm_24/spring-boot-tutorial.git
結束語
總結一下延遲消息的生命週期:
閱讀更多 死牛胖子 的文章