RabbitMQ五种工作模式的简单应用

news2024/9/24 23:31:09

发布订阅模式(三种方式)

    发布订阅模式上一篇我们已经介绍了,这里就不做介绍了,想要看的可以点此链接 在SpringBoot中对RabbitMQ三种使用方式_流殇꧂的博客-CSDN博客

 

Routing(路由模式)(基于注解的方式)

            1.创建交换机和消息队列,类型要为direct(不设置也是默认的配置)

    //路由模式:绑定交换机和队列   根据不同的日志级别,接收日志
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("routing_queue_error"),
            exchange = @Exchange(value = "routing_exchange",type = "direct"),
            key = "error_routing_key"//路由键:对当前的队列进行标记
            //将来交换机发送的数据也会绑定一个路由键,如果这两个路由键相同,则表示消息会被发送给当前的这个消息队列
    ))
    public void routingConsumerError(String message){
        System.out.println("接收error级别的日志"+message);

    }


    //路由模式:绑定交换机和队列   根据不同的日志级别,接收日志
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("routing_queue_all"),
            exchange = @Exchange(value = "routing_exchange",type = "direct"),
            key = {"error_routing_key","info_routing_key","waring_routing_key"
            ,"debug_routing_key"}//路由键:对当前的队列进行标记
            //将来交换机发送的数据也会绑定一个路由键,如果这两个路由键相同,则表示消息会被发送给当前的这个消息队列
    ))
    public void routingConsumerAll(String message){
        System.out.println("接收all级别的日志"+message);
    }

        2.消息发送者

   @Test// 路由模式:消息生产者生产消息
    public void routingPulisher(){
        //消息生产者发送消息需要绑定的路由
        re.convertAndSend("routing_exchange","error_routing_key","这是路由模式的error日志");
        re.convertAndSend("routing_exchange","info_routing_key","这是路由模式的info日志");
        re.convertAndSend("routing_exchange","waring_routing_key","这是路由模式的waring日志");
        re.convertAndSend("routing_exchange","debug_routing_key","这是路由模式的debug日志");
    }

 

 

        可以将我们指定的消息发送到指定的队列里并读取

Hello World(简单模式)(基于配置类的方式)

        1. 创建队列

    @Bean//简单模式
    public Queue simpleQueueLog(){
        return new Queue("simple_queue_log");
    }

        2.创建接收业务

    //简单消息模式
    @RabbitListener(queues= ("simple_queue_log"))
    public void simpleQueue(Object message){
        System.out.println("简单模式:"+message);
    }

        3.发送消息

  @Test
    public void simpleConsumerPublisher(){
        re.convertAndSend("simple_queue_log","Hello World,简单模式");
    }

 

Work queues(工作队列模式)(基于配置类的方式)

        1.创建队列

       @Bean//工作队列模式
    public Queue workQueueLog(){
        return new Queue("work_queue_log");
    }

        2.消费业务

    //消息队列模式
    @RabbitListener(queues = "work_queue_log")
    public void workConsumer01(String message){
        System.out.println("01消费者:"+message);
    }
    //消息队列模式
    @RabbitListener(queues = "work_queue_log")
    public void workConsumer02(String message){
        System.out.println("02消费者:"+message);
    }

        3.发送消息

  @Test
    public void workConsumerPublisher(){
          for (int i=1;i<11;i++){
              String s = UUID.randomUUID().toString();
              re.convertAndSend("work_queue_log",s);
          }
    }

 

        我们可以看到消息交替被消费 

Topics(主题模式)(基于注解的方式)

        1.创建交换机和队列         #多    *一      .连接

    //主题模式 
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("topic_queue_email"),
            exchange =@Exchange(value = "topic_exchange",type = "topic"),
            key = "info.#.email.#"
            ))
    public void topicConsumerEmail(Object message){
        System.out.println("主题模式消费者接收订阅的邮件消息"+message);
    }
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("topic_queue_sms"),
            exchange =@Exchange(value = "topic_exchange",type = "topic"),
            key = "info.#.sms.#"
    ))
    public void topicConsumerSms(Object message){
        System.out.println("主题模式消费者接收订阅的短信消息"+message);
    }

        2.发送消息

  @Test// 主题模式:消息生产者生产消息
    public void topicsPublisher(){
        re.convertAndSend("topic_exchange","info.wwww.email.com","这是一个邮件信息1");
        re.convertAndSend("topic_exchange","info.wwww.sms.com","这是一个消息1");
        re.convertAndSend("topic_exchange","info.w.sms.com","这是一个消息2");
        re.convertAndSend("topic_exchange","info.a.email.com","这是一个邮件信息2");
    }

 

        自定义key来消费消息 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通信算法之173: 物理层峰均比PAPT

一. SC-FDMA技术 OFDM技术&#xff0c;能有效克服宽带通信系统中的频率选择性衰落&#xff0c;降低传输符号间干扰。但4G LTE标准&#xff0c;OFDMA只用在其下行传输&#xff0c;上行端采用了单载波频分复用技术&#xff08;single carrier frequency domain multiple access S…

【办公类-19-01】“微信表情”表情包上传,用Python调整各类尺寸、格式

背景需求&#xff1a; 今天学了“微信表情”的表情图上传流程&#xff0c;发现其中有多种尺寸参数&#xff0c;必须完全符合尺寸、格式&#xff0c;才能上传。 以上有PNG、GIF的不同&#xff0c;有50*50,120*120,240*240,750*400四款差异&#xff0c;手动修改太费时了 我想用…

我第一次面试自动化测试就被diss了,人生惨遭滑铁卢…

如果你恰好刚刚进入一家新公司&#xff0c;领导一上来就让你开展自动化测试&#xff0c;作为一名初出茅庐的测试新人&#xff0c;除了手足无措&#xff0c;你只能默默慨叹自己能力尚欠&#xff0c;眼前只会出现一个又一个无从下手的问题&#xff1a; 作为手工测试&#xff0c;…

MySQL的视图和索引(调优)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于MySQL数据库的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.视图是什么&#xff1f; 二.视图…

【周末闲谈】关于计算机的二三事

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 文章目录 前言一、第一台计算机的诞生&#x1f4bb;二、计算机发展历史&#x1f4da;第一代计算机&#x1f4bb;第二代计算机&#x1f4bb;第三代计算机&#x1f4bb;第四代计算机&#x…

国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块

国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口GC9A01 产品介绍 1.28寸圆形IPS彩屏&#xff0c;支持 RGB 65K色显示&#xff0c;显示色彩丰富240X240分辨率…

一篇文章让你搞懂指针和数组笔试题(加深对指针的理解)

指针和数组笔试题解析 下文哦我们直接结合代码进行讲述 一维数组 1 //一维数组 #include<stdio.h> int main() {//一维数组int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n", sizeof(*a))…

【C的葵花宝典进阶篇】之指针进阶(一)

【C语言进阶篇】之指针进阶&#xff08;一&#xff09; 1. 字符指针2. 指针数组2.1 整形指针数组2.2 用指针数组模拟二维数组 3. 数组指针3.1 数组指针的表示方法3.2 深度剖析&数组名和数组名3.3 数组指针的使用3.3.1 在同一函数内直接将数组的地址赋给数组指针3.3.2 数组指…

Flink提交作业时报错Cannot support file system for ‘hdfs‘ via Hadoop

Flink整合HDFS提交作业时报错 分享一个Flink提交作业时的报错&#xff0c;由于我用的是1.12版本的Flink&#xff0c;对于Hadoop3.0新特性是没有支持的&#xff0c;我的Hadoop版本是3.3.1。然后flink-shaded-hadoop-3-uber jar包是没有的&#xff0c;需要手动添加。 报错 Caus…

6、选中tiles的模型并高亮

本节演示选中3dtiles的模型&#xff0c;选中模型与ceisum基本一致。通过鼠标左键单击模型并将选中的模型进行高亮。使用上一节的示例&#xff0c;再添加鼠标左键单击事件用于选中模型。 1、修改Handler类&#xff0c;添加静态函数onLeftClick&#xff0c;参数与右键单击函数一…

ubuntu无法定位软件包 tfpd-hpa

安装sudo apt-get install tftp-hpa tftpd-hpa 提示无法定位软件包tfpd-hpa 搜索一下解决方法是需要sudo apt-get update之后才可 结果sudo apt-get update提示索引文件下载失败 按照网上的解决办法更改/etc/apt/sources.list里面的下载源问题依旧&#xff0c;然后又把source…

怎么把word转换成只有一页的长页PDF?

来百度APP畅享高清图片 要将Word文档打印成一长页的PDF格式&#xff0c;我们得先知道word转PDF的工作原理。word转pdf其实就是将word打印出来&#xff0c;就是跟你用物理打印机打印的原理是差不多的&#xff0c;所不同的是&#xff0c;PDF虚拟打印的原理是利用虚拟打印机驱动程…

新手入门深度学习 | 6-2:AlexNet(2012)详解

&#x1f517; 运行环境&#xff1a;python3&#x1f6a9; 作者&#xff1a;K同学啊&#x1f947; 精选专栏&#xff1a;《深度学习100例》&#x1f525; 推荐专栏&#xff1a;《新手入门深度学习》&#x1f4da; 选自专栏&#xff1a;《Matplotlib教程》&#x1f9ff; 优秀专栏…

oracle新建库(表空间)表

文章目录 前言一、sqlplus登录二、表空间1.新建表空间2. 查看表空间3. 查看表空间和对应数据文件4.表空间增加数据文件5.删除单个数据文件&#xff08;只有一个默认的会删除失败&#xff09;6.删除表空间及数据文件(慎用) 三、创建新用户并指定表空间1.去掉前缀2.新建用户&…

C语言是一种通用的、面向过程的编程语言

具有以下特点&#xff1a; 简洁而高效&#xff1a;C语言的语法相对简单&#xff0c;同时提供了丰富的编程结构和功能&#xff0c;使得开发者能够用较少的代码实现复杂的任务。C语言的执行效率高&#xff0c;能够直接操作计算机硬件&#xff0c;提供了底层的控制和优化能力。 可…

时间序列预测 | Matlab基于极限梯度提升树XGBoost时间序列预测,XGBoost时间序列预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于极限梯度提升树XGBoost时间序列预测,XGBoost时间序列预测模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

后端开发常见技术场景

文章目录 1、单点登录这块怎么实现的1.1 概述1.2 JWT解决单点登录1.3 回答要点 2、权限认证是如何实现的2.1 概述2.2 RBAC权限模型2.3 回答要点 3、上传数据的安全性你们怎么控制&#xff1f;3.1 概述3.2 对称加密3.3 非对称加密3.4 回答要点 4、你负责项目的时候遇到了哪些比较…

【Ubuntu学习MySQL——导出数据报错ERROR1290】

将数据表 runoob_tbl 数据导出到 /tmp/runoob.txt 文件中出错&#xff1a; 这是因为mysql有个安全变量限制。可以通过以下语句查看设置的路径&#xff0c;然后将要导入到的文件名称改到此路径下即可。

现场工程师宝典-流式处理的异常现象以及提高吞吐能力的常见优化策略

流式处理区别于按包处理&#xff0c;指的是对处理者而言&#xff0c;面对的是逻辑上无头无尾的数据流。因此&#xff0c;在提取数据流中的包时&#xff0c;就需要遵循其内在的格式&#xff0c;进行头部捕获、提取、校验。然而&#xff0c;如果不考虑TCP等流式数据的异常情况&am…

视频怎么做成二维码?一招轻松制作二维码

怎么把视频做成二维码&#xff1f;现在用二维码来做载体存储视频&#xff0c;这种方法能够有效的减少内存占用&#xff0c;可以将视频储存在云端&#xff0c;他人只需要扫码就能够查看视频。下面来教大家一招关于视频二维码制作&#xff08;音视频二维码制作-一键免费生成音视频…