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

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

 更新時(shí)間:2025年06月25日 11:44:27   作者:超級(jí)小忍  
本文介紹SpringBoot集成RabbitMQ的步驟,涵蓋配置連接、消息發(fā)送與接收,并對(duì)比兩種定義Exchange與隊(duì)列的方式:手動(dòng)聲明(適合復(fù)雜路由)和注解綁定(適合快速開發(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ā)送和接收消息的基本流程,并介紹如何通過 兩種方式定義交換機(jī)(Exchange)與隊(duì)列(Queue):一種是在生產(chǎn)者端手動(dòng)聲明,另一種是在消費(fèi)者端通過注解自動(dòng)綁定。

準(zhǔn)備工作

1. 安裝 RabbitMQ

可以通過 Docker 快速安裝 RabbitMQ:

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

訪問管理界面: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ū)韯?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è)簡單的 REST 控制器來觸發(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ì)通過 Exchange 來路由消息。

3. 使用 Exchange 的兩種方式

在 RabbitMQ 中,消息的流向是:Producer → Exchange → Queue → Consumer。因此,定義 Exchange 和 Queue 并進(jìn)行綁定是非常關(guā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ī)的場景,如多服務(wù)協(xié)同、復(fù)雜路由等。

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

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

示例:使用 @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):開發(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ì)列(推薦用于簡單場景)

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

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

消息監(jiān)聽器

@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ī)器之間能夠通過網(wǎng)絡(luò)訪問 RabbitMQ 服務(wù)器,并根據(jù)需要調(diào)整主機(jī)名或 IP 地址。
  • 并發(fā)處理:考慮在消費(fèi)者端配置并發(fā)消費(fèi)者以提高消息處理效率。
  • 冪等性與容錯(cuò)機(jī)制:建議開啟確認(rèn)機(jī)制(ACK/NACK),避免消息丟失或重復(fù)消費(fèi)。

總結(jié)

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

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

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

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

相關(guān)文章

  • 深入理解Java中的Properties類

    深入理解Java中的Properties類

    Properties類是Java中用于處理配置文件的工具類,它繼承自 Hashtable類,實(shí)現(xiàn)了Map接口,本文主要介紹了Java中的Properties類,感興趣的可以了解一下
    2024-01-01
  • springboot配置嵌入式servlet容器的方法

    springboot配置嵌入式servlet容器的方法

    這篇文章主要介紹了springboot配置嵌入式servlet容器的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Pulsar源碼徹底解決重復(fù)消費(fèi)問題

    Pulsar源碼徹底解決重復(fù)消費(fèi)問題

    這篇文章主要為大家介紹了Pulsar源碼徹底解決重復(fù)消費(fèi)問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java設(shè)計(jì)模式中的迭代器模式詳解

    Java設(shè)計(jì)模式中的迭代器模式詳解

    迭代器模式官方解釋就是提供一個(gè)對(duì)象來順序訪問聚合對(duì)象中的一系列數(shù)據(jù),而不暴露聚合對(duì)象的內(nèi)部表示。何為聚合對(duì)象呢?最典型的就是集合類。大白話也就是,集合中的數(shù)據(jù)是私有的,集合中不應(yīng)該提供直接遍歷的方法,要定義一個(gè)新的對(duì)象用于訪問這個(gè)集合
    2023-02-02
  • 解決Springboot配置excludePathPatterns不生效的問題

    解決Springboot配置excludePathPatterns不生效的問題

    這篇文章主要介紹了解決Springboot配置excludePathPatterns不生效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 解決Spring運(yùn)行時(shí)報(bào)錯(cuò):Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

    解決Spring運(yùn)行時(shí)報(bào)錯(cuò):Consider defining a bean o

    該文章主要講述了在使用Spring框架時(shí),如果遇到某個(gè)bean未找到的錯(cuò)誤,應(yīng)該在配置文件中定義該bean,解決方法是在對(duì)應(yīng)的類上添加@Component注解
    2025-01-01
  • 淺談Java中GuavaCache返回Null的注意事項(xiàng)

    淺談Java中GuavaCache返回Null的注意事項(xiàng)

    Guava在實(shí)際的Java后端項(xiàng)目中應(yīng)用的場景還是比較多的,比如限流,緩存,容器操作之類的,本文主要介紹了GuavaCache返回Null的注意事項(xiàng),感興趣的可以了解一下
    2021-10-10
  • Java?easyExcel的復(fù)雜表頭多級(jí)表頭導(dǎo)入

    Java?easyExcel的復(fù)雜表頭多級(jí)表頭導(dǎo)入

    最近在項(xiàng)目開發(fā)中遇到的一個(gè)excel復(fù)雜表頭的導(dǎo)入數(shù)據(jù)庫操作,下面這篇文章主要給大家介紹了關(guān)于Java?easyExcel的復(fù)雜表頭多級(jí)表頭導(dǎo)入的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • FilenameUtils.getName?函數(shù)源碼分析

    FilenameUtils.getName?函數(shù)源碼分析

    這篇文章主要為大家介紹了FilenameUtils.getName?函數(shù)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 詳解Java MyBatis 插入數(shù)據(jù)庫返回主鍵

    詳解Java MyBatis 插入數(shù)據(jù)庫返回主鍵

    這篇文章主要介紹了詳解Java MyBatis 插入數(shù)據(jù)庫返回主鍵,有興趣的可以了解一下。
    2017-01-01

最新評(píng)論