SpringBoot2.0實戰(19)整合RabbitMQ之實現延遲隊列

SpringBoot2.0實戰(19)整合RabbitMQ之實現延遲隊列

相關知識

什麼是延遲隊列

隊列中的消息在等待指定時間後,消費者才能夠進行消費。

應用場景

商城系統,下單後半個小時未付款,自動取消訂單

實現方式

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 父工程

SpringBoot2.0實戰(19)整合RabbitMQ之實現延遲隊列

添加 spring-boot-starter-amqp 的依賴

SpringBoot2.0實戰(19)整合RabbitMQ之實現延遲隊列

添加後的整體依賴如下

SpringBoot2.0實戰(19)整合RabbitMQ之實現延遲隊列

編碼(發送方)

配置

SpringBoot2.0實戰(19)整合RabbitMQ之實現延遲隊列

定義隊列

定義一個測試隊列 TestDeadQueue,併為該隊列配置死信隊列,配置的方法就是在聲明隊列的時候,添加參數 x-dead-letter-exchange 及 x-dead-letter-routing-key,其實就是在消費失敗時,將消息使用該 exchange 及 routing 發送至指定隊列

SpringBoot2.0實戰(19)整合RabbitMQ之實現延遲隊列

測試發送

SpringBoot2.0實戰(19)整合RabbitMQ之實現延遲隊列

源碼地址

本章源碼 : https://gitee.com/gongm_24/spring-boot-tutorial.git

結束語

總結一下延遲消息的生命週期:

SpringBoot2.0實戰(19)整合RabbitMQ之實現延遲隊列


分享到:


相關文章: