Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ


文章目錄
Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ
RabbitMQ簡介
引入依賴
編寫配置
編寫接口
啟用Rabbit注解
消息監聽
消息測試
Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ
Spring Boot 2 整合RabbitMQ案例。

RabbitMQ簡介
簡介
RabbitMQ是一個由erlang開發的AMQP(Advanved Message Queue Protocol)的開源實現。
核心概念
Message
消息,消息是不具名的,它由消息頭和消息體組成。消息體是不透明的,而消息頭則由一系列的可選屬性組
成,這些屬性包括routing-key(路由鍵)、 priority(相對於其他消息的優先權)、 delivery-mode(指出
該消息可能需要持久性存儲)等。
Publisher
消息的生產者,也是一個向交換器發布消息的客戶端應用程序。
Exchange
交換器,用來接收生產者發送的消息並將這些消息路由給服務器中的隊列。
Exchange有4種類型: direct(默認), fanout, topic, 和headers,不同類型的Exchange轉發消息的策略有
所區別。
Queue
消息隊列,用來保存消息直到發送給消費者。它是消息的容器,也是消息的終點。一個消息
可投入一個或多個隊列。消息一直在隊列里面,等待消費者連接到這個隊列將其取走。
Binding
綁定,用於消息隊列和交換器之間的關聯。一個綁定就是基於路由鍵將交換器和消息隊列連
接起來的路由規則,所以可以將交換器理解成一個由綁定構成的路由表。
Exchange 和Queue的綁定可以是多對多的關系。
Connection
網絡連接,比如一個TCP連接。
Channel
信道,多路復用連接中的一條獨立的雙向數據流通道。信道是建立在真實的TCP連接內的虛
擬連接, AMQP 命令都是通過信道發出去的,不管是發布消息、訂閱隊列還是接收消息,這
些動作都是通過信道完成。因為對於操作系統來說建立和銷毀 TCP 都是非常昂貴的開銷,所
以引入了信道的概念,以復用一條 TCP 連接。
Consumer
消息的消費者,表示一個從消息隊列中取得消息的客戶端應用程序。
Virtual Host
虛擬主機,表示一批交換器、消息隊列和相關對象。虛擬主機是共享相同的身份認證和加
密環境的獨立服務器域。每個 vhost 本質上就是一個 mini 版的 RabbitMQ 服務器,擁有
自己的隊列、交換器、綁定和權限機制。 vhost 是 AMQP 概念的基礎,必須在連接時指定,
RabbitMQ 默認的 vhost 是 / 。
Broker
表示消息隊列服務器實體


引入依賴
利用Spring Initializr快速創建一個Spring Boot項目spring-boot-v2-amqp,主要依賴如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

編寫配置
添加RabbitMQ的配置信息。RabbbitMQ安裝請參閱 Docker安裝RabbitMQ

spring:
rabbitmq:
host: 192.168.0.2 # RabbitMQ主機IP
port: 5672 # 默認5672,一致可不寫
username: guest # 默認guest,一致可不寫
password: guest # 默認guest,一致可不寫
# virtual-host: / # 默認是"/",一致可不寫,public void setVirtualHost(String virtualHost) {this.virtualHost = "".equals(virtualHost) ? "/": virtualHost;}


編寫接口
新建一個AmqpController,用於發送消息

@RestController
public class AmqpController {

private final RabbitTemplate rabbitTemplate;

public AmqpController(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}

private final static String SUCCESS = "success";

/**
* 單點
* @param msg
* @return
*/
@GetMapping("/direct")
public String direct(String msg){
rabbitTemplate.convertAndSend("amq.direct", "xudc", msg);
return SUCCESS;
}

@GetMapping("/fanout")
public String fanout(String msg) {
rabbitTemplate.convertAndSend("amq.fanout", "", msg);
return SUCCESS;
}

@GetMapping("/topic")
public String topic(String msg){
rabbitTemplate.convertAndSend("amq.topic", "xudc.#", msg);
return SUCCESS;
}
}

啟用Rabbit注解
在主啟動類上加上注解@EnableRabbit

@SpringBootApplication
@EnableRabbit // 開啟基於注解的RabbitMQ模式
public class SpringBootAmqpApplication {

public static void main(String[] args) {
SpringApplication.run(SpringBootAmqpApplication.class, args);
}
}

消息監聽
編寫消息監聽者

@Component
public class AmqpListener {

@RabbitListener(queues = "xudc")
public void receive1(String message) {
System.err.println("xudc -- receive1接收到消息:" + message);
}

@RabbitListener(queues = "xudc.book")
public void receive2(String message) {
System.err.println("xudc.book -- receive2接收到消息:" + message);
}

@RabbitListener(queues = "andy")
public void receive3(String message) {
System.err.println("andy -- receive3接收到消息:" + message);
}
}

消息測試
direct
fanout
topic
至此,實現了Spring Boot和RabbitMQ的簡單整合。
————————————————
版權聲明:本文為CSDN博主「xudc」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xudc0521/article/details/89362348


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM