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

Springboot整合RabbitMQ消息中間件的使用

 更新時間:2023年11月13日 09:30:57   作者:霧林小妖  
在沒有特別要求的情況下,通常會選擇RabbitMQ作為消息中間件,本文主要介紹了Springboot整合RabbitMQ消息中間件的使用,具有一定的參考價值,感興趣的可以了解一下

1、RabbitMQ概述

RabbitMQ是shiyongERLANG語言編寫的,實現(xiàn)了高級消息隊列協(xié)議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。

常見的消息中間件:KAFKA、RabbitMQ、ActiveMQ、RocketMQ(可以處理分布式事務(wù))

1.1、什么是RabbitMQ?

【1、通過案例理解RabbitMQ】

你想和遠方的好友實現(xiàn)通信,這個時候你給好友寫封信,我們將寫好的信封裝成一個信封,將信放到郵箱中,郵差就會在規(guī)定的時間將這封信送到遠方好友的手中。

寄件人是A系統(tǒng),遠方好友是B系統(tǒng),RabbitMQ就是郵箱,郵差就是信道。A系統(tǒng)和B系統(tǒng)可以通過RabbitMQ實現(xiàn)通信。

【2、為什么要使用RabbitMQ? 】

1、RabbitMQ實現(xiàn)了AMQP標準的消息服務(wù)器

2、可靠性,RabbitMQ的持久化支持,保證了消息的穩(wěn)定性;

3、RabbitMQ使用了Erlang開發(fā)語言,高并發(fā)、高可用、集群部署簡單等特性;

【3、RabbitMQ能做什么?】

1、業(yè)務(wù)解耦:下訂單、扣減庫存、生成訂單、發(fā)紅包、發(fā)短信、異步操作、日志處理、跨平臺通信等。

2、流量消峰:控制請求量。

3、路由靈活:RabbitMQ有豐富的Exchange(交換器),通過關(guān)鍵字Routingkey判斷消息的具體隊列(Queue)。

1.2、RabbitMQ消息發(fā)送原理

1、生產(chǎn)者生產(chǎn)消息,發(fā)送給服務(wù)器端的Exchange交換器。

2、Exchange收到消息,根據(jù)用戶發(fā)送的RoutingKey,將消息轉(zhuǎn)發(fā)給匹配的Queue1或Queue2。

3、Queue1或Queue2收到消息后,將消息發(fā)送給訂閱者(消費者1或消費者2)。

4、消費者收到消息,發(fā)送ACK給隊列確認收到消息。

5、消費者收到ACK確認消息,然后刪除隊列中緩存的對應(yīng)消息。

1.3、RabbitMQ在項目中的應(yīng)用

A系統(tǒng)和B系統(tǒng)之間如果不是使用同一架構(gòu)或者語言編寫的,這個時候可以通過RabbitMQ進行通信。

如A系統(tǒng)可以發(fā)送JSON類型的數(shù)據(jù),B系統(tǒng)獲取數(shù)據(jù)的時候可以解析JSON,達到跨系統(tǒng)交互。

2、Springboot整合RabbitMQ

2.1、配置工程包信息

核心包:spring-cloud-starter-bus-amqp

<?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 https://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.7.17</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.txc</groupId>
    <artifactId>springbootrabbitmqdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springbootrabbitmqdemo</name>
    <description>springbootrabbitmqdemo</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.2、在application.yml文件中配置連接信息

spring:
  rabbitmq:
    addresses: localhost #IP地址
    username: guest   #用戶名
    password: guest   #密碼
    dynamic: true     #默認創(chuàng)建一個AmqpAdmin的Bean 默認:true

2.3、在工程中創(chuàng)建RabbitMQ消息接收程序

@RabbitListener(queuesToDeclare = @Queue("myQueue "))作用:

1、讓監(jiān)聽關(guān)聯(lián)到myQueue隊列中

2、queuesToDeclare能夠?qū)崿F(xiàn)當(dāng)myQueue隊列不存在的時候,自動創(chuàng)建

3、queuesToDeclare:后面的參數(shù)需要的是數(shù)組類型使用@Queue創(chuàng)建

@Configuration
public class RabbitMQReceive {
    @RabbitListener(queuesToDeclare = @Queue("myQueue"))
    public void process(String message){
        System.out.println("======消費消息====="+message);
    }
}

2.4、在工程中創(chuàng)建RabbitMQ消息發(fā)送程序

創(chuàng)建控制層,模擬向RabbitMQ消息中間件發(fā)送消息。

通過convertAndSend向RabbitMQ發(fā)送消息。

@Controller
public class TestRabbitMQController {
    @Resource
    private AmqpTemplate amqpTemplate;

    @RequestMapping("/sendMessageToQueue")
    @ResponseBody
    public void  sendMessageToQueue(){
        amqpTemplate.convertAndSend("myQueue","{'code':'200','msg':'你想發(fā)的消息。'}");
    }
}

2.5、測試結(jié)果

 訪問地址:http://localhost:8080/sendMessageToQueue

3、創(chuàng)建Exchange(交換器)綁定Queue

3.1、Exchange交換器的使用場景

我們要實現(xiàn)如果是華為的訂單就發(fā)送到huaweiQueue隊列中,如果是聯(lián)想的訂單就發(fā)送到lenovoQueue隊列中。

主要就是通過RoutingKey(huaweiKey、lenovoKey)來實現(xiàn)。

3.2、在工程中創(chuàng)建RabbitMQ接收器

通過@RabbitListener實現(xiàn)創(chuàng)建huaweiQueue隊列和computerExchange交換器,并通過huaweiKey實現(xiàn)隊列和交換器綁定。

在不指定交換器類型的情況下,默認的交換器類型是direct

@RabbitListener(bindings = @QueueBinding(
        exchange = @Exchange("computerExchange"),
        key = "huaweiKey",
        value = @Queue("huaweiQueue")
))
public void process1(String message){
    System.out.println("======消費消息====="+message);
}

3.3、在工程中創(chuàng)建RabbitmQ消息發(fā)送程序

convertAndSend參數(shù)說明:convertAndSend(“交換器名稱”,”綁定key”,”需要發(fā)送的消息”);

@RequestMapping("/sendMessageToExchange")
@ResponseBody
public void  sendMessageToExchange(){
    amqpTemplate.convertAndSend("computerExchange","huaweiKey","{'code':'200','msg':'測試Exchange和Queue綁定'}");
}

3.4、測試結(jié)果

訪問地址:http://localhost:8080/sendMessageToExchange

到此這篇關(guān)于Springboot整合RabbitMQ消息中間件的使用的文章就介紹到這了,更多相關(guān)Springboot RabbitMQ消息中間件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 淺析Java如何防范SQL注入攻擊

    淺析Java如何防范SQL注入攻擊

    這篇文章主要為大家詳細介紹了SQL注入漏洞的原理,表現(xiàn)形式以及如何防范這種攻擊,文中的示例代碼講解詳細,希望可以幫助開發(fā)者構(gòu)建更安全的Java應(yīng)用
    2025-05-05
  • 通過實例了解JavaBean開發(fā)及使用過程解析

    通過實例了解JavaBean開發(fā)及使用過程解析

    這篇文章主要介紹了通過實例了解JavaBean開發(fā)及使用過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 解讀@RabbitListener起作用的原理

    解讀@RabbitListener起作用的原理

    這篇文章主要介紹了解讀@RabbitListener起作用的原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 解讀Java中Set真的是無序的嗎

    解讀Java中Set真的是無序的嗎

    這篇文章主要介紹了Java中Set是不是無序的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringCloud的Eureka模塊詳解

    SpringCloud的Eureka模塊詳解

    這篇文章主要介紹了SpringCloud的Eureka模塊詳解,Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 模塊來實現(xiàn)服務(wù)治理,就是提供了微服務(wù)架構(gòu)中各微服務(wù)實例的快速上線或下線且保持各服務(wù)能正常通信的能力的方案總稱,需要的朋友可以參考下
    2023-07-07
  • SpringBoot中Tomcat和SpringMVC整合源碼分析

    SpringBoot中Tomcat和SpringMVC整合源碼分析

    Tomcat和SpringMVC都是通過這樣的方式進行集成的,SpringBoot出現(xiàn)之前SpringMVC項目是直接部署在Tomcat服務(wù)器中的,這篇文章主要介紹了SpringBoot中Tomcat和SpringMVC整合源碼分析,需要的朋友可以參考下
    2022-07-07
  • Java強制類型轉(zhuǎn)換原理詳解(父類轉(zhuǎn)子類、子類轉(zhuǎn)父類)

    Java強制類型轉(zhuǎn)換原理詳解(父類轉(zhuǎn)子類、子類轉(zhuǎn)父類)

    這篇文章主要給大家介紹了關(guān)于Java強制類型轉(zhuǎn)換原理(父類轉(zhuǎn)子類、子類轉(zhuǎn)父類)的相關(guān)資料,所謂的強制類型轉(zhuǎn)換,其實是自動類型轉(zhuǎn)換的逆過程,在數(shù)據(jù)類型兼容的情況下,將容量大的數(shù)據(jù)類型轉(zhuǎn)換為容量小的數(shù)據(jù)類型,需要的朋友可以參考下
    2023-12-12
  • java根據(jù)擴展名獲取系統(tǒng)圖標和文件圖標示例

    java根據(jù)擴展名獲取系統(tǒng)圖標和文件圖標示例

    這篇文章主要介紹了java根據(jù)擴展名獲取系統(tǒng)圖標和文件圖標示例,需要的朋友可以參考下
    2014-03-03
  • 詳解java.lang.reflect.Modifier.isInterface()方法

    詳解java.lang.reflect.Modifier.isInterface()方法

    這篇文章主要介紹了詳解java.lang.reflect.Modifier.isInterface()方法的相關(guān)資料,這里提供實例幫助大家理解這個方法的使用,需要的朋友可以參考下
    2017-09-09
  • Java實現(xiàn)多數(shù)據(jù)源的幾種方式總結(jié)

    Java實現(xiàn)多數(shù)據(jù)源的幾種方式總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Java實現(xiàn)多數(shù)據(jù)源的幾種方式,最近項目中的工作流需要查詢多個數(shù)據(jù)源的數(shù)據(jù),數(shù)據(jù)源可能是不同種類的,需要的朋友可以參考下
    2023-08-08

最新評論

永吉县| 东乡族自治县| 耒阳市| 贡嘎县| 讷河市| 宜都市| 略阳县| 鲁甸县| 蒲城县| 徐水县| 油尖旺区| 巫溪县| 辽阳县| 邵阳县| 高密市| 温宿县| 奉化市| 宜宾县| 册亨县| 永和县| 东乡族自治县| 山西省| 延吉市| 阿巴嘎旗| 仁寿县| 虎林市| 翁源县| 山东省| 盱眙县| 河津市| 孟津县| 昌黎县| 夹江县| 开鲁县| 信宜市| 平阴县| 昌宁县| 家居| 尚义县| 开封市| 浦北县|