SpringBoot - 第二十六章 | RabbitMQ的集成和使用
上兩篇文章講了緩存資料庫Redis的使用,在開發過程中,一般上在系統或者應用間通信或者進行異步通知(登錄後發送短信或者郵件等)時,都會使用消息隊列進行解決此業務場景的解耦問題。常見的MQ有kafka、activemq、zeromq、rabbitmq 等等,各大MQ的對比和優劣勢可以自行Google,這章節講解下消息隊列RabbitMQ的集成和簡單使用示例。
RabbitMQ介绍
RabbitMQ是一個開源的AMQP實現,伺服器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。
Message Broker 與 AMQP 簡介
Message Broker是一種消息驗證、傳輸、路由的架構模式,其設計目標主要應用於下面這些場景:
- 消息路由到一個或多個目的地
- 消息轉化為其他的表現方式
- 執行消息的聚集、消息的分解,並將結果發送到他們的目的地,然後重新組合相應返回給消息用戶
- 調用Web服務來檢索資料
- 響應事件或錯誤
- 使用發布-訂閱模式來提供內容或基於主題的消息路由
AMQP是Advanced Message Queuing Protocol的簡稱,它是一個面向消息中間件的開放式標準應用層協議。 AMQP定義了這些特性:
- 消息方向
- 消息隊列
- 消息路由(包括:點到點和發布-訂閱模式)
- 可靠性
- 安全性
Docker RabbitMQ準備
1 | docker run --name myrabbitmq -p 15672:15672 -p 5672:5672 -d rabbitmq:management |
命令說明:
1 | - --name myrabbitmq :將 Container 取名為 myrabbitmq |
相關配置
可以通過引入spring-boot-starter-amqp用於支持RabbitMQ。
加入pom的依賴
1 | <dependency> |
參數配置
在src/main/resources/application.properties中配置RabbitMQ訊息
1 | # rabbitmq 相關配置 |
配置自動加載類為:org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration
建立 RabbitConfig (RabbitMQ的配置類)
用於配置隊列、交換器、路由等高級訊息。這裡我們以入門為主,先以最小化的配置來定義,以完成一個基本的生產和消費過程。
建立 Sender (消息生產者)
通過注入RabbitTemplate接口的實例來實現消息的發送。在該生產者,會將接收到的字符串,發送到名為J.J.Huang的隊列中。
建立 Receiver (消息消費者)
通過@RabbitListener註解定義該類對J.J.Huang隊列的監聽,並用@RabbitHandler註解來指定對消息的處理方法。所以,該消費者實現了對J.J.Huang隊列的消費,消費操作為輸出消息的字符串內容。
建立 DemoController
對接測試
- 啟動應用,並瀏覽http://localhost:15672 (guest/guest)
在Rabbitmq的控制台,connections,可以看見連接對象的。說明已經正常啟動了。
在Rabbitmq的控制台,Queues,可以查看到隊列J.J.Huang的消息。
測試
測試結果
註:以上參考了
oKong 的 SpringBoot | 第十二章:RabbitMQ的集成和使用文章。
程序猿DD-翟永超 的 Spring Boot中使用RabbitMQ 文章。
一起来学 SpringBoot 2.x | 第十二篇:初探 RabbitMQ 消息队列