亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

Spring Boot 中如何將隊(duì)列和交換機(jī)綁定(含實(shí)例講解)

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

一、RabbitMQ中的關(guān)鍵概念

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

二、需求描述

假設(shè)我們?cè)诿霘⑾到y(tǒng)中有一個(gè)秒殺訂單的隊(duì)列和對(duì)應(yīng)的交換機(jī),分別為 seckill.queueseckill.exchange。為了將訂單處理的消息路由到正確的隊(duì)列,我們需要將它們通過(guò)一個(gè) seckill.routingkey 綁定在一起。

三、配置代碼實(shí)現(xiàn)

1. 引入必要的依賴(lài)

首先,在 pom.xml 中引入 RabbitMQ 的依賴(lài):

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

2. 配置類(lèi)中綁定隊(duì)列和交換機(jī)

在配置類(lèi)中,我們需要定義交換機(jī)、隊(duì)列,以及將兩者通過(guò)路由鍵綁定。以下是具體實(shí)現(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 {
    // 定義常量表示交換機(jī)、隊(duì)列和路由鍵
    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. 定義秒殺交換機(jī)
    @Bean
    public TopicExchange seckillExchange() {
        return new TopicExchange(SECKILL_EXCHANGE);
    }
    // 2. 定義秒殺隊(duì)列
    @Bean
    public Queue seckillQueue() {
        return new Queue(SECKILL_QUEUE);
    }
    // 3. 綁定隊(duì)列到交換機(jī),并指定路由鍵
    @Bean
    public Binding bindingSeckillQueue(Queue seckillQueue, TopicExchange seckillExchange) {
        return BindingBuilder.bind(seckillQueue).to(seckillExchange).with(SECKILL_ROUTINGKEY);
    }
}

3. 代碼詳細(xì)解讀

  • seckillExchange():這是定義的一個(gè) TopicExchange 類(lèi)型的交換機(jī)。在 RabbitMQ 中,TopicExchange 允許根據(jù)路由鍵的模式匹配將消息路由到不同的隊(duì)列中。
  • seckillQueue():定義了一個(gè) Queue 隊(duì)列,用來(lái)存儲(chǔ)秒殺訂單的消息。此處的 Queue 是持久化的,當(dāng) RabbitMQ 重啟時(shí),隊(duì)列中的消息不會(huì)丟失。
  • bindingSeckillQueue():通過(guò) BindingBuilder 將隊(duì)列和交換機(jī)綁定在一起,并使用 with(SECKILL_ROUTINGKEY) 指定了路由鍵。這樣,當(dāng)消息生產(chǎn)者發(fā)送帶有 seckill.routingkey 的消息時(shí),消息會(huì)被路由到 seckill.queue 隊(duì)列中。

四、如何發(fā)送消息

綁定完成后,你可以使用 RabbitTemplate 將消息發(fā)送到交換機(jī),并指定路由鍵:

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 交換機(jī),并且指定 seckill.routingkey 作為路由鍵,消息最終會(huì)被路由到綁定的 seckill.queue 隊(duì)列。

五、消息接收方如何處理

消費(fèi)者(監(jiān)聽(tīng)隊(duì)列消息的服務(wù))可以使用 @RabbitListener 來(lái)監(jiān)聽(tīng)隊(duì)列中的消息。例如:

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class SeckillMessageReceiver {
    // 監(jiān)聽(tīng)秒殺隊(duì)列
    @RabbitListener(queues = RabbitMQConfig.SECKILL_QUEUE)
    public void receiveMessage(String message) {
        System.out.println("接收到秒殺消息:" + message);
        // 處理消息的邏輯
    }
}

六、幾種常見(jiàn)的綁定示例

1. 使用 Direct Exchange 進(jìn)行精確匹配

如果你想要根據(jù)路由鍵的精確匹配來(lái)路由消息,可以使用 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");
}

這種方式下,只有當(dāng)路由鍵完全匹配 direct.routingkey 時(shí),消息才會(huì)被路由到對(duì)應(yīng)的隊(duì)列。

2. 使用 Fanout Exchange 廣播消息

如果你想將消息廣播到多個(gè)隊(duì)列,可以使用 FanoutExchange,它會(huì)忽略路由鍵,將消息發(fā)送到所有綁定的隊(duì)列。

@Bean
public FanoutExchange fanoutExchange() {
    return new FanoutExchange("fanout.exchange");
}
@Bean
public Binding bindingFanoutQueue(Queue seckillQueue, FanoutExchange fanoutExchange) {
    return BindingBuilder.bind(seckillQueue).to(fanoutExchange);
}

到此這篇關(guān)于springboot Rabbit MQ topic 配置文件綁定隊(duì)列和交換機(jī)的文章就介紹到這了,更多相關(guān)springboot Rabbit MQ topic 配置文件綁定隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android Studio更改項(xiàng)目使用的JDK(詳細(xì)步驟)

    Android Studio更改項(xiàng)目使用的JDK(詳細(xì)步驟)

    本文介紹了如何在Android Studio中修改Gradle和JDK的配置步驟,包括打開(kāi)設(shè)置、進(jìn)入Gradle設(shè)置、修改JDK路徑、保存并生效等,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 使用@RequestBody傳對(duì)象參數(shù)時(shí)碰到的坑

    使用@RequestBody傳對(duì)象參數(shù)時(shí)碰到的坑

    這篇文章主要介紹了使用@RequestBody傳對(duì)象參數(shù)時(shí)碰到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 關(guān)于Spring不同類(lèi)型的注入方式 p-namespace,c-namespace

    關(guān)于Spring不同類(lèi)型的注入方式 p-namespace,c-namespace

    這篇文章主要介紹了Spring不同類(lèi)型的注入方式 p-namespace,c-namespace。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java1.8安裝及環(huán)境變量配置教程

    java1.8安裝及環(huán)境變量配置教程

    這篇文章主要介紹了java1.8安裝及環(huán)境變量配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 詳解Spring Security的formLogin登錄認(rèn)證模式

    詳解Spring Security的formLogin登錄認(rèn)證模式

    對(duì)于一個(gè)完整的應(yīng)用系統(tǒng),與登錄驗(yàn)證相關(guān)的頁(yè)面都是高度定制化的,非常美觀而且提供多種登錄方式。這就需要Spring Security支持我們自己定制登錄頁(yè)面,也就是本文給大家介紹的formLogin模式登錄認(rèn)證模式,感興趣的朋友跟隨小編一起看看吧
    2019-11-11
  • Graceful Response 構(gòu)建 Spring Boot 響應(yīng)處理的方法

    Graceful Response 構(gòu)建 Spring Boot 響應(yīng)

    Graceful Response是一個(gè)Spring Boot技術(shù)棧下的優(yōu)雅響應(yīng)處理器,提供一站式統(tǒng)一返回值封裝、全局異常處理、自定義異常錯(cuò)誤碼等功能,本文介紹Graceful Response 構(gòu)建 Spring Boot 下優(yōu)雅的響應(yīng)處理,感興趣的朋友一起看看吧
    2024-01-01
  • Mybatis中 XML配置詳解

    Mybatis中 XML配置詳解

    這篇文章主要介紹了Mybatis中 XML配置詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-01-01
  • IDEA中sout快捷鍵無(wú)效問(wèn)題的解決方法

    IDEA中sout快捷鍵無(wú)效問(wèn)題的解決方法

    這篇文章主要介紹了IDEA中sout快捷鍵無(wú)效問(wèn)題,在類(lèi)文件中進(jìn)行操作會(huì)造成sout快捷命令無(wú)法自動(dòng)生成,比如操作了import引入其它包之后,本文給大家分享解決方法,感興趣的朋友一起看看吧
    2022-07-07
  • 詳解MyBatis的Dao層實(shí)現(xiàn)和配置文件深入

    詳解MyBatis的Dao層實(shí)現(xiàn)和配置文件深入

    這篇文章主要為大家詳細(xì)介紹了MyBatis的Dao層實(shí)現(xiàn)和配置文件深入,文中的示例代碼講解詳細(xì),感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • 關(guān)于springboot集成swagger3時(shí)spring-plugin-core報(bào)錯(cuò)的問(wèn)題

    關(guān)于springboot集成swagger3時(shí)spring-plugin-core報(bào)錯(cuò)的問(wèn)題

    這篇文章主要介紹了關(guān)于springboot集成swagger3時(shí)spring-plugin-core報(bào)錯(cuò)的問(wèn)題,本文給大家分享解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評(píng)論