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

Rabbitmq消息推送功能實現(xiàn)示例

 更新時間:2022年12月27日 10:29:41   作者:十年(Sugar)  
rabbitMQ為異步消息處理提出了一個很好的解決方案,它是一個非常好用的消息中間件。主要解決當生產(chǎn)者大量產(chǎn)生數(shù)據(jù)時,消費者無法快速消費的問題。這個時候需要一個中間層,保存這個數(shù)據(jù),rabbitMQ是一個很好的解決方案

一.前言

1.1場景

在我們實際開發(fā)中到一個特定的時候是比如工作流到某個狀態(tài)時, 我們會向某某單位發(fā)送消息, 這時就會用到我們的消息推送---rabbitmq

簡單畫一下:

1.2消息交換機三種形式

首先我們了解下消息隊列是由交換機exchange和隊列組合構(gòu)成的,有三種形式

  • 直連型:一個交換機關(guān)聯(lián)一個隊列,指定一個路由key,消息通過交換機名稱和路由key發(fā)送到指定隊列,發(fā)送一個,隊列里面就多一個消息。
  • 扇型:一個交換機關(guān)聯(lián)多個隊列。消息通過交換機名稱發(fā)送,所有關(guān)聯(lián)了這個交換機的隊列都將收到消息,發(fā)送一個消息再N個消息隊列產(chǎn)生N個一模一樣的消息數(shù)據(jù)。
  • 主題型:一個交換機根據(jù)規(guī)則關(guān)聯(lián)多個隊列。這種類型與扇型的很像,但是主題型會根據(jù)動態(tài)路由key決定消息的投遞到哪個隊列。這里的路由規(guī)則很像正則表達式。會根據(jù)事先設(shè)定的路由規(guī)則動態(tài)將消息投遞到隊列,可能投遞到一個隊列也可能投遞到多個隊列。

二.建設(shè)demo工程

2.1依賴

<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>

2.2yml文件指定rabbitmq連接信息

server:
  port: 8021
spring:
  #給項目來個名字
  application:
    name: rabbitmq-provider
  #配置rabbitMq 服務器
  rabbitmq:
    host: localhost
    port: 5672
    #確認消息已發(fā)送到交換機(Exchange)
    publisher-confirm-type: correlated
    #確認消息已發(fā)送到隊列(Queue)
    publisher-returns: true

注意:我們需要創(chuàng)建兩個工程,一個生產(chǎn)者producer、一個消費者comsumer,生產(chǎn)者用來生產(chǎn)消息,消費者用來消費生產(chǎn)者將消息投遞到rabbitmq中的消息。

兩個工程中的pom依賴一樣,yml也一樣,只需要將server.port設(shè)置成不同的端口即可。這里我們將生產(chǎn)者設(shè)置為8021端口,消費者設(shè)置為8022端口。

2.3直連型消息鏈接

從上面的講解中我們知道,有交換機exchange,有隊列queue,有路由routing,因此我們需要在生產(chǎn)者端將三者關(guān)聯(lián)起來,然后發(fā)送消息,這樣消費端才能收到消息。

創(chuàng)建config工作類綁定關(guān)聯(lián)

@Configuration
public class Config {
    public static String directRouting = "directRouting";
    public static String directQueue = "directQueue";
    public static String directExchange = "directExchange";
    @Bean
    public Queue DirectQueue() {
        return new Queue(Config.directQueue,true);  //true 是否持久
    }
    @Bean
    DirectExchange DirectExchange() {
        return new DirectExchange(Config.directExchange);
    }
    @Bean
    Binding bindingDirect() {
//        BindingBuilder.bind(隊列A).to(交換機B).with(路由) 將隊列A綁定到交換機B,使用路由C傳遞消息
        return BindingBuilder.bind(DirectQueue()).to(DirectExchange()).with(directRouting);
    }

發(fā)送消息

@Autowired
private RabbitTemplate rabbitTemplate;  //使用RabbitTemplate,這提供了接收/發(fā)送等等方法
@GetMapping("/sendDirectMsg")
public String sendMsg() {
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("id",UUID.randomUUID().toString());
    map.put("data","hello,i am direct msg!");
    map.put("datetime",System.currentTimeMillis());
    //交換機 路由 消息(發(fā)送消息的時候不需要管隊列,因為隊列已經(jīng)在DirectRabbitConfig中配置了,隊列應該是消費者關(guān)心的事情)
    rabbitTemplate.convertAndSend(DirectRabbitConfig.directExchange, DirectRabbitConfig.directRouting, map);
    return "ok";
}

第二個工程中: 接收消息

@Component
@RabbitListener(queues = "directQueue")//監(jiān)聽的隊列名稱 directQueue,不需要管路由和交換機,因為這些是生產(chǎn)者管理的事情。消費者只需要關(guān)心隊列即可
public class DirectReceiver {
    @RabbitHandler
    public void handler(Map testMessage) {
        System.out.println("directReceiver消費者收到消息  : " + testMessage.toString());
    }
}

到此這篇關(guān)于Rabbitmq消息推送功能實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Rabbitmq消息推送內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatisplus駝峰命名映射的問題解決

    mybatisplus駝峰命名映射的問題解決

    本文主要介紹了mybatisplus駝峰命名映射的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Spring AOP如何在注解上使用SPEL表達式注入對象

    Spring AOP如何在注解上使用SPEL表達式注入對象

    這篇文章主要介紹了Spring AOP如何在注解上使用SPEL表達式注入對象,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java如何在項目中實現(xiàn)excel導入導出功能

    java如何在項目中實現(xiàn)excel導入導出功能

    這篇文章主要介紹了java如何在項目中實現(xiàn)excel導入導出功能的相關(guān)資料,EasyExcel是一個基于Apache?POI開發(fā)的開源Java庫,用于簡化Excel文件的讀寫操作,文中將用法介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • java實現(xiàn)掃雷游戲入門程序

    java實現(xiàn)掃雷游戲入門程序

    這篇文章主要為大家詳細介紹了java實現(xiàn)掃雷游戲入門程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • spring boot過濾器FilterRegistrationBean實現(xiàn)方式

    spring boot過濾器FilterRegistrationBean實現(xiàn)方式

    這篇文章主要介紹了spring boot過濾器FilterRegistrationBean實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 淺談Java中的可變參數(shù)

    淺談Java中的可變參數(shù)

    下面小編就為大家?guī)硪黄獪\談Java中的可變參數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • SpringBoot + vue2.0查詢所用功能詳解

    SpringBoot + vue2.0查詢所用功能詳解

    這篇文章主要介紹了SpringBoot + vue2.0查詢所用功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • 詳解基于IDEA2020.1的JAVA代碼提示插件開發(fā)例子

    詳解基于IDEA2020.1的JAVA代碼提示插件開發(fā)例子

    這篇文章主要介紹了詳解基于IDEA2020.1的JAVA代碼提示插件開發(fā)例子,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • 解決swaggerUI頁面沒有顯示Controller方法的坑

    解決swaggerUI頁面沒有顯示Controller方法的坑

    這篇文章主要介紹了解決swaggerUI頁面沒有顯示Controller方法的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot整合Spring Batch示例代碼

    SpringBoot整合Spring Batch示例代碼

    這篇文章主要來和大家一起探討一下SpringBoot如何整合Spring Batch,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10

最新評論

荆州市| 涪陵区| 甘孜县| 海阳市| 陕西省| 饶河县| 崇仁县| 新兴县| 衡山县| 乐平市| 南皮县| 惠州市| 达拉特旗| 广灵县| 道真| 金阳县| 章丘市| 山西省| 德庆县| 苏尼特右旗| 繁峙县| 轮台县| 武定县| 漠河县| 保山市| 怀来县| 宜黄县| 张家口市| 株洲市| 南开区| 东乡族自治县| 武清区| 高淳县| 旺苍县| 高清| 潮州市| 深水埗区| 秦安县| 巢湖市| 邵阳市| 文昌市|