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

SpringBoot整合RabbitMQ示例詳解

 更新時(shí)間:2023年07月12日 08:35:54   作者:卑微小鐘  
這篇文章主要介紹了SpringBoot整合RabbitMQ示例詳解,RabbitMQ是一個(gè)實(shí)現(xiàn)了AMQP高級(jí)消息隊(duì)列協(xié)議的消息隊(duì)列服務(wù),用Erlang語(yǔ)言。是面向消息的中間件,需要的朋友可以參考下

SpringBoot整合RabbitMQ

1.生產(chǎn)者SpringBootProducer

1.1 創(chuàng)建工程并導(dǎo)入依賴

我們使用的springboot版本為2.5.6,其他都是根據(jù)spring-boot-starter-parent自動(dòng)選擇版本

引入以下工程即可

  • spring-boot-starter-test 用于測(cè)試
  • junit 用于單元測(cè)試
  • spring-boot-starter-amqp SpringBoot和RabbitMQ的整合方案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
        <relativePath/>
    </parent>
    <artifactId>springboot-producer</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

1.2 創(chuàng)建配置文件并配置

SpringBoot配置文件名稱為application.yml

需要配置的內(nèi)容如下:

# 配置RabbitMQ的基本信息
spring:
  rabbitmq:
    # 地址
    host: 192.168.52.128
    # 端口
    port: 5672
    # 用戶名
    username: admin
    # 密碼
    password: admin
    # 虛擬機(jī)
    virtual-host: /test

1.3 創(chuàng)建項(xiàng)目啟動(dòng)類

@SpringBootApplication
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }
}

1.4 創(chuàng)建RabbitMQ配置類

@Configuration
public class RabbitMQConfig {
	// 配置代碼都寫在這里
}

(1)設(shè)置默認(rèn)的交換機(jī)的名稱和隊(duì)列名稱

/**
 * 默認(rèn)測(cè)試的交換機(jī)機(jī)名稱
 * springboot_topic_exchange
 */
public static final String EXCHANGE_NAME = "springboot_topic_exchange";
/**
 * 默認(rèn)的隊(duì)列名稱
 * springboot_root_queue
 */
public static final String QUEUE_NAME = "springboot_root_queue";

(2)創(chuàng)建通配符類型的交換機(jī)

/**
 * 創(chuàng)建交換機(jī)
 *
 * @return 交換機(jī)
 */
@Bean("bootExchange")
public Exchange bootExchange() {
    // 創(chuàng)建一個(gè)通配符的交換機(jī)
    return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
}

這里需要在bean上加上名稱(雖然如果沒有時(shí)會(huì)使用方法名,但是嚴(yán)謹(jǐn)),便于之后交換機(jī)和隊(duì)列綁定操作。

除了通配符交換機(jī)外,還支持廣播型交換機(jī)、定向型交換機(jī)。

  • 廣播型交換機(jī)
/**
 * 創(chuàng)建交換機(jī)
 *
 * @return 交換機(jī)
 */
@Bean("bootExchange")
public Exchange bootExchange() {
    // 創(chuàng)建一個(gè)通配符的交換機(jī)
    return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
}
  • 定向型交換機(jī)
@Bean("directExchange")
public Exchange directExchange() {
    return ExchangeBuilder.directExchange("direct_exchange").durable(true).build();
}

(3)創(chuàng)建一個(gè)隊(duì)列

/**
 * 創(chuàng)建隊(duì)列
 *
 * @return 隊(duì)列
 */
@Bean("bootQueue")
public Queue bootQueue() {
    return QueueBuilder.durable(QUEUE_NAME).build();
}

(4)綁定交換機(jī)和隊(duì)列

/**
 * 綁定隊(duì)列和交換機(jī)
 * 主要:隊(duì)列、交換機(jī)、routing key
 *
 * @return 綁定關(guān)系
 */
@Bean
public Binding bindingQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange) {
    return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
}

(5)完整配置類

@Configuration
public class RabbitMQConfig {
    /**
     * 默認(rèn)測(cè)試的交換機(jī)機(jī)名稱
     * springboot_topic_exchange
     */
    public static final String EXCHANGE_NAME = "springboot_topic_exchange";
    /**
     * 默認(rèn)的隊(duì)列名稱
     * springboot_root_queue
     */
    public static final String QUEUE_NAME = "springboot_root_queue";
    /**
     * 創(chuàng)建交換機(jī)
     *
     * @return 交換機(jī)
     */
    @Bean("bootExchange")
    public Exchange bootExchange() {
        // 創(chuàng)建一個(gè)通配符的交換機(jī)
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }
    /**
     * 創(chuàng)建隊(duì)列
     *
     * @return 隊(duì)列
     */
    @Bean("bootQueue")
    public Queue bootQueue() {
        return QueueBuilder.durable(QUEUE_NAME).build();
    }
    /**
     * 綁定隊(duì)列和交換機(jī)
     * 主要:隊(duì)列、交換機(jī)、routing key
     *
     * @return 綁定關(guān)系
     */
    @Bean
    public Binding bindingQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
    }
}

1.5 測(cè)試發(fā)送消息

@SpringBootTest
@RunWith(SpringRunner.class)
public class ProducerTest {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testSend() {
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "boot.name", "Spring Boot RabbitMQ");
    }
}

2.消費(fèi)者SpringBootConsumer

2.1 創(chuàng)建工程并導(dǎo)入依賴

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;parent&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
        &lt;version&gt;2.5.6&lt;/version&gt;
        &lt;relativePath/&gt; &lt;!-- lookup parent from repository --&gt;
    &lt;/parent&gt;
    &lt;groupId&gt;com.example&lt;/groupId&gt;
    &lt;artifactId&gt;springboot-consumer&lt;/artifactId&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
    &lt;name&gt;springboot-consumer&lt;/name&gt;
    &lt;description&gt;springboot-consumer&lt;/description&gt;
    &lt;properties&gt;
        &lt;java.version&gt;1.8&lt;/java.version&gt;
    &lt;/properties&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-amqp&lt;/artifactId&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.amqp&lt;/groupId&gt;
            &lt;artifactId&gt;spring-rabbit-test&lt;/artifactId&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
    &lt;build&gt;
        &lt;plugins&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
    &lt;/build&gt;
&lt;/project&gt;

PS:以上依賴是由springboot工程創(chuàng)建完成,和之前手動(dòng)創(chuàng)建沒有本質(zhì)差別

2.2 創(chuàng)建配置文件并配置

SpringBoot配置文件名稱為application.yml

需要配置的內(nèi)容如下:

# 配置RabbitMQ的基本信息
spring:
  rabbitmq:
    # 地址
    host: 192.168.52.128
    # 端口
    port: 5672
    # 用戶名
    username: admin
    # 密碼
    password: admin
    # 虛擬機(jī)
    virtual-host: /test

2.3 創(chuàng)建項(xiàng)目啟動(dòng)類

@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

2.3 創(chuàng)建監(jiān)聽器

@Component
public class RabbitMQListener {
    @RabbitListener(queues = "springboot_root_queue")
    public void listenerQueue(Message message) {
        System.out.println("RabbitMQListener:" + new String(message.getBody()));
    }
}

@RabbitListener表示當(dāng)前方法監(jiān)聽對(duì)應(yīng)的隊(duì)列,并且支持多隊(duì)列。

2.4 run

控制臺(tái)如下:

RabbitMQListener:Spring Boot RabbitMQ

到此這篇關(guān)于SpringBoot整合RabbitMQ示例詳解的文章就介紹到這了,更多相關(guān)SpringBoot整合RabbitMQ內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • eclipse啟動(dòng)一個(gè)Springboot項(xiàng)目

    eclipse啟動(dòng)一個(gè)Springboot項(xiàng)目

    本文主要介紹了eclipse啟動(dòng)一個(gè)Springboot項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • java poi判斷excel是xlsx還是xls類型

    java poi判斷excel是xlsx還是xls類型

    這篇文章主要為大家詳細(xì)介紹了如何利用java poi來判斷excel是xlsx還是xls類型,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-10-10
  • Java?Mybatis查詢數(shù)據(jù)庫(kù)舉例詳解

    Java?Mybatis查詢數(shù)據(jù)庫(kù)舉例詳解

    這篇文章主要給大家介紹了關(guān)于Java?Mybatis查詢數(shù)據(jù)庫(kù)的相關(guān)資料,在MyBatis中可以使用遞歸查詢實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中樹形結(jié)構(gòu)數(shù)據(jù)的查詢,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • java跟蹤執(zhí)行的sql語(yǔ)句示例分享

    java跟蹤執(zhí)行的sql語(yǔ)句示例分享

    這篇文章主要介紹了java跟蹤執(zhí)行的sql語(yǔ)句示例分享,需要的朋友可以參考下
    2014-03-03
  • 關(guān)于servlet向mysql添加數(shù)據(jù)時(shí)中文亂碼問題的解決

    關(guān)于servlet向mysql添加數(shù)據(jù)時(shí)中文亂碼問題的解決

    最近在工作中遇到一個(gè)小問題,出現(xiàn)了中文亂碼的問題,無奈只能想辦法解決,下面這篇文章主要給大家介紹了關(guān)于servlet向mysql添加數(shù)據(jù)時(shí)中文亂碼問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • Java?Thread.join()方法使用詳細(xì)解析

    Java?Thread.join()方法使用詳細(xì)解析

    Thread.join()是Java多線程編程中的關(guān)鍵方法,用于確保線程執(zhí)行順序和數(shù)據(jù)完整性,下面這篇文章主要介紹了Java?Thread.join()方法使用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-01-01
  • Java ArrayList集合詳解(Java動(dòng)態(tài)數(shù)組)

    Java ArrayList集合詳解(Java動(dòng)態(tài)數(shù)組)

    這篇文章主要介紹了Java ArrayList集合詳解(Java動(dòng)態(tài)數(shù)組),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java?-jar啟動(dòng)服務(wù)并輸出日志常用命令小結(jié)

    java?-jar啟動(dòng)服務(wù)并輸出日志常用命令小結(jié)

    這篇文章主要介紹了在Linux環(huán)境下運(yùn)行JAR包的幾種方法,包括在命令結(jié)尾添加&使其在后臺(tái)運(yùn)行,使用nohup使程序不掛斷運(yùn)行,以及將日志輸出到指定文件或丟棄,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • springboot如何使用vue打包過的頁(yè)面資源

    springboot如何使用vue打包過的頁(yè)面資源

    這篇文章主要介紹了springboot如何使用vue打包過的頁(yè)面資源,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 探討Java語(yǔ)言中那些修飾符

    探討Java語(yǔ)言中那些修飾符

    在java中常見的修飾符有:abstract(抽象的)、static(靜態(tài)的)、public(公共的)、protected(受保護(hù)的)、private(私有的)、synchronized(同步的)、native(本地的)、transient(暫時(shí)的)、volatile(易失的)、final(不可改變的)。對(duì)java語(yǔ)言修飾符感興趣的朋友一起看看吧
    2016-11-11

最新評(píng)論

台安县| 苍山县| 通化县| 扎囊县| 玉环县| 遂昌县| 东丽区| 大悟县| 平邑县| 德江县| 郓城县| 江城| 金乡县| 东宁县| 宜川县| 团风县| 韩城市| 东明县| 泰安市| 东安县| 元谋县| 台北县| 额尔古纳市| 宁陕县| 柞水县| 丹棱县| 南昌县| 金溪县| 庆元县| 察隅县| 济源市| 阳新县| 常熟市| 台北县| 当阳市| 唐海县| 烟台市| 突泉县| 抚顺县| 故城县| 平邑县|