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

在Spring Boot中集成RabbitMQ的實(shí)戰(zhàn)記錄

 更新時(shí)間:2025年06月25日 11:44:27   作者:超級(jí)小忍  
本文介紹SpringBoot集成RabbitMQ的步驟,涵蓋配置連接、消息發(fā)送與接收,并對(duì)比兩種定義Exchange與隊(duì)列的方式:手動(dòng)聲明(適合復(fù)雜路由)和注解綁定(適合快速開(kāi)發(fā)),感興趣的朋友跟隨小編一起看看吧

前言

在現(xiàn)代微服務(wù)架構(gòu)中,消息隊(duì)列(Message Queue)是實(shí)現(xiàn)異步通信、解耦系統(tǒng)組件的重要工具。RabbitMQ 是一個(gè)流行的消息中間件,支持多種消息協(xié)議,具有高可靠性和可擴(kuò)展性。

本博客將詳細(xì)介紹如何在 Spring Boot 項(xiàng)目中集成 RabbitMQ,包括配置、發(fā)送和接收消息的基本流程,并介紹如何通過(guò) 兩種方式定義交換機(jī)(Exchange)與隊(duì)列(Queue):一種是在生產(chǎn)者端手動(dòng)聲明,另一種是在消費(fèi)者端通過(guò)注解自動(dòng)綁定。

準(zhǔn)備工作

1. 安裝 RabbitMQ

可以通過(guò) Docker 快速安裝 RabbitMQ:

docker run -d --hostname my-rabbit --name rabbitmq \
  -p 5672:5672 -p 15672:15672 \
  rabbitmq:3-management
  • 5672:AMQP 協(xié)議端口
  • 15672:RabbitMQ 管理界面端口

訪問(wèn)管理界面:http://localhost:15672
默認(rèn)賬號(hào)密碼:guest / guest

2. 消息發(fā)送者(Producer)配置

1. 創(chuàng)建 Spring Boot 項(xiàng)目

使用 Spring Initializr 或 IDE 的新建項(xiàng)目向?qū)?lái)創(chuàng)建一個(gè)新的 Spring Boot 項(xiàng)目,確保添加以下依賴:

  • Spring Web
  • Spring AMQP

2. 配置 RabbitMQ 連接信息

application.yml 中配置 RabbitMQ 的連接參數(shù):

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

3. 編寫消息發(fā)送邏輯

創(chuàng)建一個(gè)簡(jiǎn)單的 REST 控制器來(lái)觸發(fā)消息發(fā)送:

@RestController
@RequestMapping("/api/producer")
public class ProducerController {
    @Autowired
    private AmqpTemplate amqpTemplate;
    @GetMapping("/send")
    public String sendMessage(@RequestParam String message) {
        amqpTemplate.convertAndSend("my.queue", message);
        return "Message sent: " + message;
    }
}

? 注意:這種方式適用于直接發(fā)送到隊(duì)列的情況,但在實(shí)際項(xiàng)目中我們通常會(huì)通過(guò) Exchange 來(lái)路由消息。

3. 使用 Exchange 的兩種方式

在 RabbitMQ 中,消息的流向是:Producer → Exchange → Queue → Consumer。因此,定義 Exchange 和 Queue 并進(jìn)行綁定是非常關(guān)鍵的步驟。

下面介紹兩種常見(jiàn)的定義方式:

方式一:在生產(chǎn)者端手動(dòng)聲明 Exchange、Queue 和 Binding

示例:Direct Exchange

1. 配置類定義 Exchange、Queue 及其綁定關(guān)系

@Configuration
public class RabbitMQConfig {
    @Bean
    public DirectExchange myDirectExchange() {
        return new DirectExchange("my.direct.exchange");
    }
    @Bean
    public Queue myDirectQueue() {
        return new Queue("my.direct.queue");
    }
    @Bean
    public Binding bindingDirectQueueToExchange(Queue myDirectQueue, DirectExchange myDirectExchange) {
        return BindingBuilderSupport.bind(myDirectQueue).to(myDirectExchange).with("direct.key").noargs();
    }
}

2. 發(fā)送消息時(shí)指定 Exchange 和 Routing Key

amqpTemplate.convertAndSend("my.direct.exchange", "direct.key", message);

這種方式適合需要精細(xì)控制隊(duì)列和交換機(jī)的場(chǎng)景,如多服務(wù)協(xié)同、復(fù)雜路由等。

方式二:在消費(fèi)者端通過(guò)注解自動(dòng)聲明 Exchange、Queue 并綁定

Spring 提供了強(qiáng)大的注解功能,可以在消費(fèi)者監(jiān)聽(tīng)方法上直接聲明 Exchange、Queue 和綁定關(guān)系,無(wú)需額外的配置類。

示例:使用 @RabbitListener 注解綁定

@Component
public class ConsumerListener {
    @RabbitListener(bindings = @QueueBinding(
        value = @Queue(value = "my.annotation.queue", durable = "true"),
        exchange = @Exchange(value = "my.annotation.exchange", type = "direct", durable = "true"),
        key = "annotation.key"
    ))
    public void receive(String message) {
        System.out.println("【消費(fèi)者】收到消息:" + message);
    }
}

優(yōu)點(diǎn):開(kāi)發(fā)更高效,特別適合快速搭建原型或小型項(xiàng)目。

注意事項(xiàng)

  • 此方式只在消費(fèi)者端有效;
  • 如果已有 Exchange 或 Queue 與注解配置不一致,可能會(huì)拋出異常;
  • 建議設(shè)置 durable = "true" 實(shí)現(xiàn)持久化。

4. 消息消費(fèi)者(Consumer)配置

1. 創(chuàng)建 Spring Boot 項(xiàng)目

同樣地,創(chuàng)建一個(gè)新的 Spring Boot 項(xiàng)目,這次只需要添加 Spring AMQP 依賴。

2. 配置 RabbitMQ 連接信息

與生產(chǎn)者的配置相同,在 application.yml 中配置 RabbitMQ 的連接參數(shù)。

3. 創(chuàng)建隊(duì)列并編寫消息接收邏輯

方法一:手動(dòng)定義隊(duì)列(推薦用于簡(jiǎn)單場(chǎng)景)

@Configuration
public class RabbitMQConfig {
    @Bean
    public Queue myQueue() {
        return new Queue("my.queue");
    }
}

方法二:使用 @RabbitListener 自動(dòng)綁定(詳見(jiàn)上文)

消息監(jiān)聽(tīng)器

@Component
public class ConsumerListener {
    @RabbitListener(queues = "my.queue")
    public void receive(String message) {
        System.out.println("Received message: " + message);
    }
}

注意事項(xiàng)

  • 隊(duì)列名稱一致性:確保生產(chǎn)者和消費(fèi)者的隊(duì)列名稱一致,這樣它們才能正確通信。
  • 網(wǎng)絡(luò)連通性:如果生產(chǎn)者和消費(fèi)者運(yùn)行在不同的機(jī)器上,請(qǐng)確保這些機(jī)器之間能夠通過(guò)網(wǎng)絡(luò)訪問(wèn) RabbitMQ 服務(wù)器,并根據(jù)需要調(diào)整主機(jī)名或 IP 地址。
  • 并發(fā)處理:考慮在消費(fèi)者端配置并發(fā)消費(fèi)者以提高消息處理效率。
  • 冪等性與容錯(cuò)機(jī)制:建議開(kāi)啟確認(rèn)機(jī)制(ACK/NACK),避免消息丟失或重復(fù)消費(fèi)。

總結(jié)

通過(guò)以上步驟,我們就可以擁有兩個(gè)獨(dú)立的 Spring Boot 應(yīng)用程序:一個(gè)用于發(fā)送消息,另一個(gè)用于消費(fèi)消息。這種方式非常適合構(gòu)建基于消息隊(duì)列的分布式系統(tǒng)。

同時(shí),也了解了兩種定義 Exchange、Queue 及其綁定關(guān)系 的方式:

方式適用場(chǎng)景特點(diǎn)
生產(chǎn)者手動(dòng)聲明多服務(wù)協(xié)作、復(fù)雜路由控制精細(xì),結(jié)構(gòu)清晰
消費(fèi)者注解綁定快速開(kāi)發(fā)、輕量級(jí)項(xiàng)目開(kāi)發(fā)效率高,但僅限于消費(fèi)者端

到此這篇關(guān)于在Spring Boot中集成RabbitMQ的完整指南的文章就介紹到這了,更多相關(guān)Spring Boot集成RabbitMQ內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring聲明式事務(wù) @Transactional 不回滾的多種情況以及解決方案

    spring聲明式事務(wù) @Transactional 不回滾的多種情況以及解決方案

    本文主要介紹了spring聲明式事務(wù) @Transactional 不回滾的多種情況以及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程

    Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • SpringBoot測(cè)試之高級(jí)配置方式

    SpringBoot測(cè)試之高級(jí)配置方式

    這篇文章主要介紹了SpringBoot測(cè)試之高級(jí)配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出

    java實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出

    這篇文章主要介紹了java實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出的方法和具體示例代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2016-04-04
  • Java異常之圖書管理系統(tǒng)

    Java異常之圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java異常之圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 詳解NIO中FileChannel文件流的簡(jiǎn)單使用

    詳解NIO中FileChannel文件流的簡(jiǎn)單使用

    NIO中Channel分為了很多種,包括FileChannel,DatagramChannel,SocketChannel和ServerSocketChannel,其中FileChannel主要用于對(duì)文件的讀寫,本文主要和大家探討了FileChannel文件流的簡(jiǎn)單使用,希望對(duì)大家有所幫助
    2023-05-05
  • Spring Boot外部化配置實(shí)戰(zhàn)解析

    Spring Boot外部化配置實(shí)戰(zhàn)解析

    這篇文章主要介紹了Spring Boot外部化配置實(shí)戰(zhàn)解析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 初識(shí)MyBatis及基本配置和執(zhí)行

    初識(shí)MyBatis及基本配置和執(zhí)行

    這篇文章主要介紹了初識(shí)MyBatis的基本知識(shí),文中給大家提到了mybatis基本配置和執(zhí)行過(guò)程,需要的朋友可以參考下
    2017-11-11
  • Mybatis映射文件實(shí)例詳解

    Mybatis映射文件實(shí)例詳解

    這篇文章主要介紹了 Mybatis映射文件實(shí)例詳解,需要的朋友可以參考下
    2017-02-02
  • MyBatis?與?Spring?Data?JPA?核心對(duì)比總結(jié)(選型指南與最佳實(shí)踐)

    MyBatis?與?Spring?Data?JPA?核心對(duì)比總結(jié)(選型指南與最佳實(shí)踐)

    MyBatis和Spring?Data?JPA是Java兩大主流持久層框架,分別代表SQL可控性與面向?qū)ο箝_(kāi)發(fā)效率的兩種設(shè)計(jì)哲學(xué),本文給大家介紹MyBatis與Spring?Data?JPA核心對(duì)比總結(jié),感興趣的朋友跟隨小編一起看看吧
    2025-11-11

最新評(píng)論

册亨县| 武清区| 乃东县| 六安市| 五常市| 湟中县| 邵武市| 陇川县| 桐柏县| 甘德县| 金华市| 涪陵区| 湟中县| 盐津县| 弥渡县| 垣曲县| 明溪县| 六安市| 崇礼县| 右玉县| 阿拉善盟| 上蔡县| 茂名市| 定安县| 镇安县| 湖南省| 信阳市| 获嘉县| 新宁县| 南宫市| 鹿泉市| 海晏县| 南靖县| 库伦旗| 龙门县| 昌平区| 光山县| 大荔县| 从化市| 台中市| 江源县|