国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot項目使用RabbitMQ隊列

這篇具有很好參考價值的文章主要介紹了Spring Boot項目使用RabbitMQ隊列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Spring Boot項目使用RabbitMQ隊列

一、Rabbitmq的安裝

RabbitMQ是一個開源的遵循 AMQP協(xié)議實現(xiàn)的基于 Erlang語言編寫,**即需要先安裝部署Erlang環(huán)境再安裝RabbitMQ環(huán)境。

erlang的安裝在windows中直接點擊安裝即可。

安裝完erlang后設(shè)置erlang的環(huán)境變量ERLANG_HOME。

然后安裝rabbitmq。

安裝成功后。

可以在瀏覽器中輸入http://localhost:15672,訪問地址顯示的結(jié)果如下。

Spring Boot項目使用RabbitMQ隊列

?

這里的username輸入“guest”, password輸入“guest”,然后點擊“l(fā)ogin”,之后進(jìn)入rabbitmq的界面。如下圖所示。

Spring Boot項目使用RabbitMQ隊列

?

注意:這里rabbitmq的默認(rèn)網(wǎng)頁訪問端口15672,rabbitmq的訪問端口是5672。新建的sprint boot項目需要進(jìn)行交互的端口號就是5672。

下面新建一個Spring boot項目。

二、Spring boot新建rabbitmq項目

1、點擊“ File”-->“New”---->“Project”。如下圖。

Spring Boot項目使用RabbitMQ隊列

?

2、點擊“Project”后,就可以彈出對話框。

Spring Boot項目使用RabbitMQ隊列

?

3、注意對話框中java的版本。然后點擊“Next”。在彈出的對話框中選擇Spring Boot的版本和Spring Web的模塊。如下圖所示。

Spring Boot項目使用RabbitMQ隊列

?4、選擇成功后,直接點擊“Finish”完成項目的構(gòu)建。

Spring Boot項目使用RabbitMQ隊列

?5、這里可以選擇“New Window”,在新窗口中打開項目,然后在pom.xml中添加依賴。rabbitmq的依賴需要使用spring-boot-starter-amqp,因為這里還需要lombok。添加的依賴代碼如下。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.0</version>
</dependency>

6、pom.xml中添加依賴后的代碼如下圖所示。

Spring Boot項目使用RabbitMQ隊列

?

7、編寫application.yml文件,可以把a(bǔ)pplication.properties修改成application.yml。

Spring Boot項目使用RabbitMQ隊列

?

8、在application.yml中設(shè)置spring boot連接rabbit的配置。代碼如下。

Spring Boot項目使用RabbitMQ隊列

?

這里的port是默認(rèn)的端口,用戶名和密碼是默認(rèn)的guest,virtual-host可以通過rabbitmq的web界面中查看出來。如下圖。

Spring Boot項目使用RabbitMQ隊列

?

下面需要進(jìn)行rabbitmq的開發(fā)設(shè)置。

三、rabbitmq的開發(fā)。

rabbitmq是部署最廣泛的開源消息代理。

其是一個消息隊列,消費隊列具備:

代碼解耦,提高系統(tǒng)穩(wěn)定性

應(yīng)對流量高峰,降低流量沖擊,面對秒殺這種情況時,請求進(jìn)來先去排隊,可以保證系統(tǒng)的穩(wěn)定

異步執(zhí)行,提高系統(tǒng)響應(yīng)速度

因為是消息隊列,必然有生產(chǎn)者和消費者,其工作模式最簡單的類型是簡單類型,也就是消息只能有一個被消費,原理圖如下。

Spring Boot項目使用RabbitMQ隊列

?

圖中有兩個消費者,因為消息只能有一個被消費,會造成消息競爭,因此此方式不適合于多個消費者共享生產(chǎn)者的消息,需要使用發(fā)布訂閱模式。

發(fā)布訂閱模式這里有exchange交換機(jī),生產(chǎn)者將消息給交換機(jī),交換機(jī)根據(jù)自身的類型(fanout)將會把所有消息復(fù)制同步到所有與其綁定的隊列,每個隊列可以有一個消費者接收消息進(jìn)行消費邏輯。原理如下圖。

Spring Boot項目使用RabbitMQ隊列

?

Spring boot中可以使用amqp的ConvertAndSendReceive方法來現(xiàn)controller的控制邏輯,其意義:按照一定的順序,只有確定消費者接收到消息,才會發(fā)送下一條信息,每條消息之間會有間隔時間。

代碼如下。

package com.example.demo.controller;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
@RestController
public class RabbitMqController {
    @Autowired
    private RabbitTemplate rabbit;
    @RequestMapping("/rabbitmq/sendPublisher")
    public String sendPublisher(){
        for(int i=0;i<20;i++){
            rabbit.convertSendAndReceive("exchange_fanout","","測試發(fā)布訂閱模式:"+i);
        }
        return "發(fā)送成功....";
    }
}

這里定義一個restful接口,接口請求sendPublisher傳輸生產(chǎn)者的接口方法,在邏輯中使用convertSendAndReceive方法使用交換器進(jìn)行發(fā)送和接收,方法中第一個參數(shù)是主題,后面是具體生產(chǎn)者發(fā)送的相關(guān)信息。

當(dāng)生產(chǎn)者發(fā)送信息后,需要消費者進(jìn)行消費,消費者的消費是通過監(jiān)聽器完成的,通過listener來控制的。接下來需要寫Listener監(jiān)聽器的代碼。

監(jiān)聽器的代碼必須定義成Component組件,也就是使用Component注解。

首先是定義一個新的交換機(jī),主題是“ exchange_fanout”,將此返回的FanoutExchange定義成Bean。代碼如下。

@Bean
public FanoutExchange exchangeFanout(){
    return new FanoutExchange("exchange_fanout");
}

這里定義兩個消費者,每個消費者都需要綁定這個交換機(jī),定義的兩個消費者也需要定義成Bean。并且和exchange_fanout進(jìn)行綁定,代碼如下。

@Bean
public Queue queueFanout1(){
    return new Queue("queue_fanout1");
}
@Bean
public Queue queueFanout2(){
    return new Queue("queue_fanout2");
}
@Bean
public Binding bindingExchange1(Queue queueFanout1,FanoutExchange exchangeFanout){
    return BindingBuilder.bind(queueFanout1).to(exchangeFanout);
}
@Bean
public Binding bindingExchange2(Queue queueFanout2,FanoutExchange exchangeFanout){
    return BindingBuilder.bind(queueFanout2).to(exchangeFanout);
}

這里的bind方法實現(xiàn)的是消費者,交換機(jī)及生產(chǎn)者之間的綁定。

接下來通過RabbitListener的Rabbitmq的監(jiān)聽器來獲取消息。

代碼如下。

@RabbitListener(queues="queue_fanout1")
public void receiverMsg1(String msg){
    System.out.println("隊列1接收到的信息:"+msg);
}
@RabbitListener(queues="queue_fanout2")
public void receiverMsg2(String msg){
    System.out.println("隊列2接收到的信息:"+msg);
}

注意每一個RabbitListener的參數(shù)queues隊列中的兩個隊列名稱,這兩個隊列都是隊列bean中產(chǎn)生的消息。

整體監(jiān)聽器的代碼如下。

package com.example.demo.listener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.context.annotation.Bean;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.TopicExchange;
@Slf4j
@Component
public class RabbitMqConsumer {
    @Bean
    public Queue queueFanout1(){
        return new Queue("queue_fanout1");
    }
    @Bean
    public Queue queueFanout2(){
        return new Queue("queue_fanout2");
    }
    @Bean
    public FanoutExchange exchangeFanout(){
        return new FanoutExchange("exchange_fanout");
    }
    @Bean
    public Binding bindingExchange1(Queue queueFanout1,FanoutExchange exchangeFanout){
        return BindingBuilder.bind(queueFanout1).to(exchangeFanout);
    }
    @Bean
    public Binding bindingExchange2(Queue queueFanout2,FanoutExchange exchangeFanout){
        return BindingBuilder.bind(queueFanout2).to(exchangeFanout);
    }
    @RabbitListener(queues="queue_fanout1")
    public void receiverMsg1(String msg){
        System.out.println("隊列1接收到的信息:"+msg);
    }
    @RabbitListener(queues="queue_fanout2")
    public void receiverMsg2(String msg){
        System.out.println("隊列2接收到的信息:"+msg);
    }
}

啟動服務(wù)后,當(dāng)瀏覽器訪問“/rabbitmq/sendPublisher”后,在瀏覽器中顯示文字“發(fā)送成功”,在控制臺輸出隊列1和隊列2的相關(guān)信息。瀏覽器顯示如下圖。

Spring Boot項目使用RabbitMQ隊列

?

控制臺輸出結(jié)果如下圖。

Spring Boot項目使用RabbitMQ隊列

?

這里有兩個隊列信息,輸出的都是1-20的相關(guān)數(shù)字。

也可以把1-20個數(shù)字分為奇數(shù)和偶數(shù),訂閱不同的主題來消費。

這里,在控制器中實現(xiàn)奇數(shù)和偶數(shù)發(fā)送不同的主題信息。代碼如下。

@RequestMapping("/rabbitmq/sendTopic")
public String sendtopic(){
    for(int i=0;i<20;i++){
        if(i%2==0){
            rabbit.convertAndSend("exchange_topic","topic.fat.topic","測試發(fā)布訂閱模型:"+i);
        }else{
            rabbit.convertAndSend("exchange_topic","topic.fat","測試發(fā)布訂閱模型:"+i);
        }

    }
    return "發(fā)布成功.....";
}

生產(chǎn)者發(fā)送信息后,雖然交換的主題都是一個主題,但是路由的內(nèi)容不同,接下來需要通過Listener監(jiān)聽器進(jìn)行信息收集。

在Listener監(jiān)聽器中需要定義Topic的Exchange交換機(jī),代碼如下。

@Bean
public TopicExchange exchangeTopic(){
    return new TopicExchange("exchange_topic");
}

這個exchangeTopic也需要定義成Bean。還需要根據(jù)兩個路由規(guī)則產(chǎn)生兩個綁定規(guī)則,不同的路由規(guī)則產(chǎn)生不同的消費信息結(jié)果,需要定義兩個不同的消費內(nèi)容。

@Bean
public Queue queueTopic1(){
    return new Queue("queue_topic1");
}
@Bean
public Queue queueTopic2(){
    return new Queue("queue_topic2");
}

接下來通過bind方法綁定主題和生產(chǎn)者路由規(guī)則之間的聯(lián)系,代碼如下。

@Bean
public Binding bindingTopic1(Queue queueTopic1,TopicExchange exchangeTopic){
    return BindingBuilder.bind(queueTopic1).to(exchangeTopic).with("topic.#");
}
@Bean
public Binding bindingTopic2(Queue queueTopic2,TopicExchange exchangeTopic){
    return BindingBuilder.bind(queueTopic2).to(exchangeTopic).with("topic.*");
}

這里再通過RabbitListener監(jiān)聽器注解根據(jù)不同的主題,輸出不同的信息,代碼如下。

@RabbitListener(queues="queue_topic1")
public void receiverTopicMsg1(String msg){
    System.out.println("消費者1接收到:"+msg);
}
@RabbitListener(queues="queue_topic2")
public void receiverTopicMsg2(String msg){
    System.out.println("消費者2接收到:"+msg);
}

使用topic主題進(jìn)行奇數(shù)和偶數(shù)分離消費的整體代碼如下。

package com.example.demo.listener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.context.annotation.Bean;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.TopicExchange;
@Slf4j
@Component
public class RabbitMqConsumer {
    @Bean
    public Queue queueTopic1(){
        return new Queue("queue_topic1");
    }
    @Bean
    public Queue queueTopic2(){
        return new Queue("queue_topic2");
    }
    @Bean
    public TopicExchange exchangeTopic(){
        return new TopicExchange("exchange_topic");
    }
    @Bean
    public Binding bindingTopic1(Queue queueTopic1,TopicExchange exchangeTopic){
        return BindingBuilder.bind(queueTopic1).to(exchangeTopic).with("topic.#");
    }
    @Bean
    public Binding bindingTopic2(Queue queueTopic2,TopicExchange exchangeTopic){
        return BindingBuilder.bind(queueTopic2).to(exchangeTopic).with("topic.*");
    }
    @RabbitListener(queues="queue_topic1")
    public void receiverTopicMsg1(String msg){
        System.out.println("消費者1接收到:"+msg);
    }
    @RabbitListener(queues="queue_topic2")
    public void receiverTopicMsg2(String msg){
        System.out.println("消費者2接收到:"+msg);
    }
}

運行代碼后,在瀏覽器中訪問“/rabbitmq/sendTopic”,如下圖所示。

Spring Boot項目使用RabbitMQ隊列

?

控制臺輸出的結(jié)果如下圖所示。

Spring Boot項目使用RabbitMQ隊列

?

至此,spring boot使用rabbitmq的基本流程結(jié)束,歡迎期待rabbitmq的實戰(zhàn)博客。文章來源地址http://www.zghlxwxcb.cn/news/detail-433647.html

到了這里,關(guān)于Spring Boot項目使用RabbitMQ隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Spring Boot 中的 RabbitMQ 是什么,如何使用

    Spring Boot 中的 RabbitMQ 是什么,如何使用

    RabbitMQ 是一個開源的消息隊列系統(tǒng),它通過 AMQP(高級消息隊列協(xié)議)來實現(xiàn)消息的傳遞。Spring Boot 是目前非常流行的 Java 開發(fā)框架,它提供了很多便利性的功能,其中就包括對 RabbitMQ 的支持。 在本文中,我們將介紹 RabbitMQ 的基本概念,以及如何在 Spring Boot 中使用 RabbitMQ。

    2024年02月12日
    瀏覽(37)
  • 【Spring云原生系列】Spring RabbitMQ:異步處理機(jī)制的基礎(chǔ)--消息隊列 原理講解+使用教程

    【Spring云原生系列】Spring RabbitMQ:異步處理機(jī)制的基礎(chǔ)--消息隊列 原理講解+使用教程

    ???? 歡迎光臨,終于等到你啦 ???? ??我是 蘇澤 ,一位對技術(shù)充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 《Spring 狂野之旅:從入門到入魔》 ?? 本專欄帶你從Spring入門到入魔 ? 這是蘇澤的個人主頁可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.

    2024年03月15日
    瀏覽(30)
  • Spring Boot中RabbitMQ自動配置的介紹、原理和使用

    Spring Boot中RabbitMQ自動配置的介紹、原理和使用

    RabbitMQ是一種高性能的消息隊列系統(tǒng),它支持多種消息協(xié)議和豐富的功能,如消息路由、消息確認(rèn)、消息重試、死信隊列等。在Spring Boot中,我們可以通過自動配置的方式來使用RabbitMQ。本文將介紹Spring Boot中RabbitMQ自動配置的介紹、原理和使用方法。 在Spring Boot中,我們可以通

    2024年02月11日
    瀏覽(17)
  • Spring Boot 中的 RabbitMQ 的消息接收配置是什么,原理,如何使用

    Spring Boot 中的 RabbitMQ 的消息接收配置是什么,原理,如何使用

    RabbitMQ 是一個流行的消息隊列系統(tǒng),它可以用于在應(yīng)用程序之間傳遞消息。Spring Boot 提供了對 RabbitMQ 的支持,我們可以使用 Spring Boot 中的 RabbitMQ 消息接收配置來接收 RabbitMQ 中的消息。本文將介紹 RabbitMQ 的消息接收配置的原理和如何在 Spring Boot 中使用它。 在 RabbitMQ 中,消

    2024年02月13日
    瀏覽(22)
  • 使用Spring Initializr方式構(gòu)建Spring Boot項目

    使用Spring Initializr方式構(gòu)建Spring Boot項目

    除了可以使用Maven方式構(gòu)建Spring Boot項目外,還可以通過Spring Initializr方式快速構(gòu)建Spring Boot項目。從本質(zhì)上說,Spring lnitializr是一個Web應(yīng)用,它提供了一個基本的項目結(jié)構(gòu),能夠幫助我們快速構(gòu)建一個基礎(chǔ)的Spring Boot項目。下面講解如何使用Spring Initializr方式構(gòu)建Spring Boot項目,

    2024年02月12日
    瀏覽(17)
  • 在Spring Boot項目中使用JPA

    Spring Boot提供了啟動器spring-boot-starter-data-jpa,只需要添加啟動器(Starters)就能實現(xiàn)在項目中使用JPA。下面一步一步演示集成Spring Data JPA所需的配置。 步驟01 添加JPA依賴。 首先創(chuàng)建新的Spring Boot項目,在項目的pom.xml中增加JPA相關(guān)依賴,具體代碼如下:

    2024年02月09日
    瀏覽(22)
  • 在Spring Boot項目中使用Redisson

    Redisson官網(wǎng)倉庫 Redisson中文文檔 Redission是一個基于Java的分布式緩存和分布式任務(wù)調(diào)度框架,用于處理分布式系統(tǒng)中的緩存和任務(wù)隊列。它是一個開源項目,旨在簡化分布式系統(tǒng)的開發(fā)和管理。 以下是Redission的一些主要特點和功能: 分布式緩存 :Redission支持分布式緩存,可以

    2024年02月07日
    瀏覽(41)
  • 使用IDEA創(chuàng)建使用 JDK8 的 2.x.x 版本的 Spring Boot 項目以及 Spring Boot 項目如何修改JDK版本

    使用IDEA創(chuàng)建使用 JDK8 的 2.x.x 版本的 Spring Boot 項目以及 Spring Boot 項目如何修改JDK版本

    目錄 一、在阿里云上官網(wǎng)上創(chuàng)建項目 二、將 IDEA 中創(chuàng)建項目的源地址修改為阿里云官網(wǎng) 三、創(chuàng)建 3.x.x 的項目之后修改配置降低至 2.7.x 版本和使用 JDK8(修改 Spring Boot 的 JDK 版本同理) 從上面的 Spring Boot 官網(wǎng)的截圖中可以發(fā)現(xiàn),自 2023-11-24 之后,最后一個支持使用 JDK8 的

    2024年01月21日
    瀏覽(26)
  • Spring Clould 消息隊列 - RabbitMQ

    Spring Clould 消息隊列 - RabbitMQ

    ??視頻地址:微服務(wù)(SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式)? 同步和異步通訊 微服務(wù)間通訊有同步和異步兩種方式: 同步通訊:就像打電話,需要實時響應(yīng)。 異步通訊:就像發(fā)郵件,不需要馬上回復(fù)。 兩種方式各有優(yōu)劣,打電話可以立即得到響應(yīng),但是你卻不能跟多個

    2024年02月12日
    瀏覽(22)
  • 【Spring Boot】Spring Boot集成RabbitMQ

    Spring Boot提供了`spring-boot-starter-amqp`組件,只需要簡單地配置即可與Spring Boot無縫集成。下面通過示例演示集成RabbitMQ實現(xiàn)消息的接收和發(fā)送。 步驟01?配置pom包。 創(chuàng)建Spring Boot項目并在pom.xml文件中添加spring-bootstarter-amqp等相關(guān)組件依賴: 在上面的示例中,引入Spring Boot自帶的

    2024年02月06日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包