欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1、RabbitMQ概述

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

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

1.1、什么是RabbitMQ?

【1、通過案例理解RabbitMQ】

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

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

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

1、RabbitMQ實(shí)現(xiàn)了AMQP標(biāo)準(zhǔn)的消息服務(wù)器

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

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

【3、RabbitMQ能做什么?】

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

2、流量消峰:控制請(qǐng)求量。

3、路由靈活:RabbitMQ有豐富的Exchange(交換器),通過關(guān)鍵字Routingkey判斷消息的具體隊(duì)列(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ā)送給訂閱者(消費(fèi)者1或消費(fèi)者2)。

4、消費(fèi)者收到消息,發(fā)送ACK給隊(duì)列確認(rèn)收到消息。

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

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

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

如A系統(tǒng)可以發(fā)送JSON類型的數(shù)據(jù),B系統(tǒng)獲取數(shù)據(jù)的時(shí)候可以解析JSON,達(dá)到跨系統(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     #默認(rèn)創(chuàng)建一個(gè)AmqpAdmin的Bean 默認(rèn):true

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

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

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

2、queuesToDeclare能夠?qū)崿F(xiàn)當(dāng)myQueue隊(duì)列不存在的時(shí)候,自動(dòng)創(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("======消費(fèi)消息====="+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、測(cè)試結(jié)果

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

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

3.1、Exchange交換器的使用場(chǎng)景

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

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

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

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

在不指定交換器類型的情況下,默認(rèn)的交換器類型是direct

@RabbitListener(bindings = @QueueBinding(
        exchange = @Exchange("computerExchange"),
        key = "huaweiKey",
        value = @Queue("huaweiQueue")
))
public void process1(String message){
    System.out.println("======消費(fèi)消息====="+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':'測(cè)試Exchange和Queue綁定'}");
}

3.4、測(cè)試結(jié)果

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

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

相關(guān)文章

  • Java爬蟲Jsoup+httpclient獲取動(dòng)態(tài)生成的數(shù)據(jù)

    Java爬蟲Jsoup+httpclient獲取動(dòng)態(tài)生成的數(shù)據(jù)

    這篇文章主要介紹了Java爬蟲Jsoup+httpclient獲取動(dòng)態(tài)生成的數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 一文了解jJava中的加密與安全

    一文了解jJava中的加密與安全

    常見的編碼有ASCII碼、Unicode編碼。最簡(jiǎn)單的編碼是直接給每個(gè)字符指定一個(gè)若干字節(jié)表示的整數(shù),復(fù)雜一點(diǎn)的編碼就需要根據(jù)已有的編碼推算出來。本文將為大家詳細(xì)講講Java重點(diǎn)加密與安全,感興趣的可以了解一下
    2022-07-07
  • Mysql存儲(chǔ)java對(duì)象實(shí)例詳解

    Mysql存儲(chǔ)java對(duì)象實(shí)例詳解

    這篇文章主要介紹了Mysql存儲(chǔ)java對(duì)象實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • idea中的lombok不生效的四種解決方法

    idea中的lombok不生效的四種解決方法

    Lombok項(xiàng)目是一個(gè)java庫,它可以自動(dòng)插入到編輯器和構(gòu)建工具中,本文將詳細(xì)給大家介紹idea中的lombok不生效的四種解決方法,需要的朋友可以參考下
    2023-05-05
  • 詳解Java中使用泛型實(shí)現(xiàn)快速排序算法的方法

    詳解Java中使用泛型實(shí)現(xiàn)快速排序算法的方法

    這篇文章主要介紹了Java中使用泛型實(shí)現(xiàn)快速排序算法的方法,快速排序的平均時(shí)間復(fù)雜度為(n\log n),文中的方法立足于基礎(chǔ)而并沒有考慮優(yōu)化處理,需要的朋友可以參考下
    2016-05-05
  • MyBatis Generator去掉生成的注解

    MyBatis Generator去掉生成的注解

    這篇文章主要介紹了MyBatis Generator去掉生成的注解的相關(guān)資料,非常不錯(cuò)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • 阿里的Easyexcel讀取Excel文件的方法(最新版本)

    阿里的Easyexcel讀取Excel文件的方法(最新版本)

    這篇文章主要介紹了阿里的Easyexcel讀取Excel文件(最新版本)的方法,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • SpringBoot的application.yml不生效問題及解決

    SpringBoot的application.yml不生效問題及解決

    這篇文章主要介紹了SpringBoot的application.yml不生效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng)代碼實(shí)例

    java實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng)代碼實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java中的自旋鎖與適應(yīng)性自旋鎖詳解

    Java中的自旋鎖與適應(yīng)性自旋鎖詳解

    這篇文章主要介紹了Java中的自旋鎖與適應(yīng)性自旋鎖詳解,在多處理器環(huán)境中某些資源的有限性,有時(shí)需要互斥訪問,這時(shí)候就需要引入鎖的概念,只有獲取了鎖的線程才能對(duì)資源進(jìn)行訪問,多線程的核心是CPU的時(shí)間分片,所以同一時(shí)刻只能有一個(gè)線程獲取到鎖,需要的朋友可以參考下
    2023-10-10

最新評(píng)論