springboot Rabbit MQ topic 配置文件綁定隊列和交換機的實現(xiàn)方法
Spring Boot 中如何將隊列和交換機綁定(含實例講解)
在使用 Spring Boot 開發(fā)高并發(fā)的秒殺系統(tǒng)或者其他場景時,RabbitMQ 是常用的消息隊列中間件之一。本文將詳細講解如何在配置類中通過代碼將隊列與交換機綁定,并指定路由鍵來實現(xiàn)消息路由。
一、RabbitMQ中的關鍵概念
- Exchange(交換機):交換機負責接收消息,并根據(jù)路由規(guī)則分發(fā)給綁定的隊列。常見的交換機類型有 Direct、Fanout、Topic 等。
- Queue(隊列):隊列是消息實際存儲的地方,消費者從隊列中獲取消息。
- Routing Key(路由鍵):生產者發(fā)送消息時,會攜帶一個路由鍵,RabbitMQ 根據(jù)這個路由鍵決定把消息發(fā)送到哪個隊列。Binding(綁定):綁定是將隊列和交換機關聯(lián)在一起,消息通過路由鍵決定是否路由到某個隊列。
二、需求描述
假設我們在秒殺系統(tǒng)中有一個秒殺訂單的隊列和對應的交換機,分別為 seckill.queue 和 seckill.exchange。為了將訂單處理的消息路由到正確的隊列,我們需要將它們通過一個 seckill.routingkey 綁定在一起。
三、配置代碼實現(xiàn)
1. 引入必要的依賴
首先,在 pom.xml 中引入 RabbitMQ 的依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>2. 配置類中綁定隊列和交換機
在配置類中,我們需要定義交換機、隊列,以及將兩者通過路由鍵綁定。以下是具體實現(xiàn):
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
// 定義常量表示交換機、隊列和路由鍵
public static final String SECKILL_EXCHANGE = "seckill.exchange";
public static final String SECKILL_QUEUE = "seckill.queue";
public static final String SECKILL_ROUTINGKEY = "seckill.routingkey";
// 1. 定義秒殺交換機
@Bean
public TopicExchange seckillExchange() {
return new TopicExchange(SECKILL_EXCHANGE);
}
// 2. 定義秒殺隊列
@Bean
public Queue seckillQueue() {
return new Queue(SECKILL_QUEUE);
}
// 3. 綁定隊列到交換機,并指定路由鍵
@Bean
public Binding bindingSeckillQueue(Queue seckillQueue, TopicExchange seckillExchange) {
return BindingBuilder.bind(seckillQueue).to(seckillExchange).with(SECKILL_ROUTINGKEY);
}
}3. 代碼詳細解讀
seckillExchange():這是定義的一個TopicExchange類型的交換機。在 RabbitMQ 中,TopicExchange允許根據(jù)路由鍵的模式匹配將消息路由到不同的隊列中。seckillQueue():定義了一個Queue隊列,用來存儲秒殺訂單的消息。此處的Queue是持久化的,當 RabbitMQ 重啟時,隊列中的消息不會丟失。bindingSeckillQueue():通過BindingBuilder將隊列和交換機綁定在一起,并使用with(SECKILL_ROUTINGKEY)指定了路由鍵。這樣,當消息生產者發(fā)送帶有seckill.routingkey的消息時,消息會被路由到seckill.queue隊列中。
四、如何發(fā)送消息
綁定完成后,你可以使用 RabbitTemplate 將消息發(fā)送到交換機,并指定路由鍵:
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class SeckillMessageSender {
@Autowired
private RabbitTemplate rabbitTemplate;
// 發(fā)送秒殺訂單消息
public void sendSeckillOrderMessage(String message) {
rabbitTemplate.convertAndSend(RabbitMQConfig.SECKILL_EXCHANGE, RabbitMQConfig.SECKILL_ROUTINGKEY, message);
System.out.println("秒殺消息已發(fā)送:" + message);
}
}在上面的代碼中,RabbitTemplate 提供了 convertAndSend 方法,將消息發(fā)送到 seckill.exchange 交換機,并且指定 seckill.routingkey 作為路由鍵,消息最終會被路由到綁定的 seckill.queue 隊列。
五、消息接收方如何處理
消費者(監(jiān)聽隊列消息的服務)可以使用 @RabbitListener 來監(jiān)聽隊列中的消息。例如:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class SeckillMessageReceiver {
// 監(jiān)聽秒殺隊列
@RabbitListener(queues = RabbitMQConfig.SECKILL_QUEUE)
public void receiveMessage(String message) {
System.out.println("接收到秒殺消息:" + message);
// 處理消息的邏輯
}
}六、幾種常見的綁定示例
1. 使用 Direct Exchange 進行精確匹配
如果你想要根據(jù)路由鍵的精確匹配來路由消息,可以使用 DirectExchange,而不是 TopicExchange。
@Bean
public DirectExchange directExchange() {
return new DirectExchange("direct.exchange");
}
@Bean
public Binding bindingDirectQueue(Queue seckillQueue, DirectExchange directExchange) {
return BindingBuilder.bind(seckillQueue).to(directExchange).with("direct.routingkey");
}這種方式下,只有當路由鍵完全匹配 direct.routingkey 時,消息才會被路由到對應的隊列。
2. 使用 Fanout Exchange 廣播消息
如果你想將消息廣播到多個隊列,可以使用 FanoutExchange,它會忽略路由鍵,將消息發(fā)送到所有綁定的隊列。
@Bean
public FanoutExchange fanoutExchange() {
return new FanoutExchange("fanout.exchange");
}
@Bean
public Binding bindingFanoutQueue(Queue seckillQueue, FanoutExchange fanoutExchange) {
return BindingBuilder.bind(seckillQueue).to(fanoutExchange);
}到此這篇關于springboot Rabbit MQ topic 配置文件綁定隊列和交換機的文章就介紹到這了,更多相關springboot Rabbit MQ topic 配置文件綁定隊列內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android Studio更改項目使用的JDK(詳細步驟)
本文介紹了如何在Android Studio中修改Gradle和JDK的配置步驟,包括打開設置、進入Gradle設置、修改JDK路徑、保存并生效等,感興趣的朋友跟隨小編一起看看吧2024-11-11
關于Spring不同類型的注入方式 p-namespace,c-namespace
這篇文章主要介紹了Spring不同類型的注入方式 p-namespace,c-namespace。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
詳解Spring Security的formLogin登錄認證模式
對于一個完整的應用系統(tǒng),與登錄驗證相關的頁面都是高度定制化的,非常美觀而且提供多種登錄方式。這就需要Spring Security支持我們自己定制登錄頁面,也就是本文給大家介紹的formLogin模式登錄認證模式,感興趣的朋友跟隨小編一起看看吧2019-11-11
Graceful Response 構建 Spring Boot 響應
Graceful Response是一個Spring Boot技術棧下的優(yōu)雅響應處理器,提供一站式統(tǒng)一返回值封裝、全局異常處理、自定義異常錯誤碼等功能,本文介紹Graceful Response 構建 Spring Boot 下優(yōu)雅的響應處理,感興趣的朋友一起看看吧2024-01-01
關于springboot集成swagger3時spring-plugin-core報錯的問題
這篇文章主要介紹了關于springboot集成swagger3時spring-plugin-core報錯的問題,本文給大家分享解決方法,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09

