Like Share Discussion Bookmark Smile

J.J. Huang   2019-04-14   Spring Boot   瀏覽次數:

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。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。

RabbitMQ官方

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
2
3
4
5
- --name myrabbitmq :將 Container 取名為 myrabbitmq
- -p 15672:15672 :將 Container 的 15672 Port 映射到主機的 15672 Port
- -p 5672:5672 :將 Container 的 5672 Port 映射到主機的 5672 Port
- -d :後台執行 Container ,並返回ID
- rabbitmq:management :指定安裝的鏡像rabbitmq:management

相關配置

可以通過引入spring-boot-starter-amqp用於支持RabbitMQ。

加入pom的依賴

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

參數配置

在src/main/resources/application.properties中配置RabbitMQ訊息

1
2
3
4
5
# rabbitmq 相關配置
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

配置自動加載類為:org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration

建立 RabbitConfig (RabbitMQ的配置類)

用於配置隊列、交換器、路由等高級訊息。這裡我們以入門為主,先以最小化的配置來定義,以完成一個基本的生產和消費過程。

建立 Sender (消息生產者)

通過注入RabbitTemplate接口的實例來實現消息的發送。在該生產者,會將接收到的字符串,發送到名為J.J.Huang的隊列中。

建立 Receiver (消息消費者)

通過@RabbitListener註解定義該類對J.J.Huang隊列的監聽,並用@RabbitHandler註解來指定對消息的處理方法。所以,該消費者實現了對J.J.Huang隊列的消費,消費操作為輸出消息的字符串內容。

建立 DemoController

對接測試

在Rabbitmq的控制台,connections,可以看見連接對象的。說明已經正常啟動了。

在Rabbitmq的控制台,Queues,可以查看到隊列J.J.Huang的消息。

測試

測試結果

註:以上參考了
oKongSpringBoot | 第十二章:RabbitMQ的集成和使用文章。
程序猿DD-翟永超Spring Boot中使用RabbitMQ 文章。
一起来学 SpringBoot 2.x | 第十二篇:初探 RabbitMQ 消息队列