最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot Rabbit MQ topic 配置文件綁定隊列和交換機的實現(xiàn)方法

 更新時間:2024年09月13日 10:02:29   作者:c137范特西  
本文詳細講解了在SpringBoot中使用RabbitMQ進行隊列與交換機的綁定方法,包括創(chuàng)建交換機、隊列和綁定它們的步驟,以及如何發(fā)送和接收消息,適用于開發(fā)高并發(fā)系統(tǒng),如秒殺系統(tǒng)等

Spring Boot 中如何將隊列和交換機綁定(含實例講解)

在使用 Spring Boot 開發(fā)高并發(fā)的秒殺系統(tǒng)或者其他場景時,RabbitMQ 是常用的消息隊列中間件之一。本文將詳細講解如何在配置類中通過代碼將隊列與交換機綁定,并指定路由鍵來實現(xiàn)消息路由。

一、RabbitMQ中的關鍵概念

  • Exchange(交換機):交換機負責接收消息,并根據(jù)路由規(guī)則分發(fā)給綁定的隊列。常見的交換機類型有 Direct、Fanout、Topic 等。
  • Queue(隊列):隊列是消息實際存儲的地方,消費者從隊列中獲取消息。
  • Routing Key(路由鍵):生產(chǎn)者發(fā)送消息時,會攜帶一個路由鍵,RabbitMQ 根據(jù)這個路由鍵決定把消息發(fā)送到哪個隊列。Binding(綁定):綁定是將隊列和交換機關聯(lián)在一起,消息通過路由鍵決定是否路由到某個隊列。

二、需求描述

假設我們在秒殺系統(tǒng)中有一個秒殺訂單的隊列和對應的交換機,分別為 seckill.queueseckill.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) 指定了路由鍵。這樣,當消息生產(chǎn)者發(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 配置文件綁定隊列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 帶你一文深入認識Java?String類

    帶你一文深入認識Java?String類

    這篇文章主要介紹了帶你一文深入認識Java?String類,String 類在Java中是很常用的類,很重要的類,在后續(xù)的學習中經(jīng)常會用到,是后續(xù)學習的基礎, 文章圍繞主題展開更多詳細內(nèi)容,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-06-06
  • Java漢字轉(zhuǎn)拼音類庫Pinyin4j詳細使用方法與實例

    Java漢字轉(zhuǎn)拼音類庫Pinyin4j詳細使用方法與實例

    這篇文章主要介紹了Java漢字轉(zhuǎn)拼音類庫Pinyin4j詳細使用方法與實例,需要的朋友可以參考下
    2020-02-02
  • java內(nèi)存優(yōu)化的方法總結(jié)

    java內(nèi)存優(yōu)化的方法總結(jié)

    在本篇文章里小編給大家分享的是一篇關于java內(nèi)存優(yōu)化的方法總結(jié)內(nèi)容,有需要的朋友們可以學習下。
    2021-06-06
  • Eclipse手動導入DTD文件實現(xiàn)方法解析

    Eclipse手動導入DTD文件實現(xiàn)方法解析

    這篇文章主要介紹了Eclipse手動導入DTD文件實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java?獲取Word中所有的插入和刪除修訂的方法

    Java?獲取Word中所有的插入和刪除修訂的方法

    這篇文章主要介紹了Java?獲取Word中所有插入和刪除修訂,在?Word?文檔中啟用跟蹤更改功能后,會記錄文檔中的所有編輯行為,例如插入、刪除、替換和格式更改。對插入或刪除的內(nèi)容,本文介紹獲取方法,需要的朋友可以參考下
    2022-04-04
  • Java8對List排序的方法大全

    Java8對List排序的方法大全

    這篇文章主要給大家介紹了關于Java8對List排序的方法大全,其實Java針對數(shù)組和List的排序都有實現(xiàn),文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 使用SSM+Layui+Bootstrap實現(xiàn)汽車維保系統(tǒng)的示例代碼

    使用SSM+Layui+Bootstrap實現(xiàn)汽車維保系統(tǒng)的示例代碼

    本文主要實現(xiàn)對汽車維修廠的信息化管理功能,。實現(xiàn)的主要功能包含用戶管理、配置管理、汽車管理、故障管理、供應商管理、配件管理、維修訂單管理、統(tǒng)計信息、公告管理、個人信息管理,感興趣的可以了解一下
    2021-12-12
  • Java拆箱與裝箱實例詳解

    Java拆箱與裝箱實例詳解

    這篇文章主要介紹了Java拆箱與裝箱,結(jié)合實例形式詳細分析了Java拆箱與裝箱相關的數(shù)據(jù)類型轉(zhuǎn)換操作技巧,需要的朋友可以參考下
    2019-11-11
  • drools中query的用法小結(jié)

    drools中query的用法小結(jié)

    這篇文章主要介紹了drools中query的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Spring編程式和聲明式事務實例講解小結(jié)

    Spring編程式和聲明式事務實例講解小結(jié)

    這篇文章主要介紹了Spring編程式和聲明式事務實例講解小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07

最新評論

常州市| 尉氏县| 绥江县| 葫芦岛市| 桃园县| 综艺| 拉萨市| 延边| 柯坪县| 昌图县| 土默特左旗| 龙井市| 文化| 寻乌县| 阳信县| 武胜县| 尼勒克县| 随州市| 东至县| 壶关县| 乾安县| 清丰县| 曲阳县| 竹北市| 南木林县| 庆安县| 安岳县| 平遥县| 穆棱市| 碌曲县| 保靖县| 安达市| 凌源市| 阿鲁科尔沁旗| 长春市| 乡宁县| 瑞安市| 星座| 衡山县| 庆安县| 延长县|