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

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

    发布订阅模式上一篇我们已经介绍了,这里就不做介绍了,想要看的可以点此链接 在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.发送消息

  @Testpublic 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.发送消息

  @Testpublic 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.hqwc.cn/news/13263.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业低成本万能架构

企业软件应用架构层出不穷&#xff08;这里的应用架构是指偏后端服务的软件架构&#xff09;每个企业由各自业务形态&#xff0c;技术栈&#xff0c;技术路线&#xff0c;技术实力不同&#xff0c;各自架构方案&#xff0c;技术选型各有各的不同&#xff0c;千姿百态&#xff0…

English Learning - L3 作业打卡 Lesson8 Day58 2023.7.3 周一

English Learning - L3 作业打卡 Lesson8 Day58 2023.7.3 周一 引言&#x1f349;句1: And this is when I learned that our borders and our obstacles can only do two things: one, stop us in our tracks or two, force us to get creative.成分划分弱读连读爆破语调 &…

颜色渐变的数据密集适用的堆叠图

一般情况会用柱状图去堆叠&#xff0c;但是如果数据量太大了&#xff0c;就可考虑这种方式堆叠。可以呈现时间和数量上不同层次数据的变化。 效果图&#xff1a; 比较详细的注释一下源码&#xff1a; import matplotlib as mpl import matplotlib.pyplot as plt import numpy …

OpenAI的新语言模型升级是否会改变人工智能领域的格局?

近年来&#xff0c;人工智能领域取得了巨大的进展&#xff0c;其中语言模型的发展尤为引人注目。而在这个领域的重要参与者之一&#xff0c;OpenAI近期宣布了其大型语言模型API的重大升级&#xff0c;引发了业界的广泛关注。随着GPT-4和gpt-3.5-turbo等新版本的推出&#xff0c…

牛客网Verilog刷题——VL39

牛客网Verilog刷题——VL39 题目答案 题目 设计一个自动贩售机&#xff0c;输入货币有两种&#xff0c;为0.5/1元&#xff0c;饮料价格是1.5/2.5元&#xff0c;要求进行找零&#xff0c;找零只会支付0.5元。 1、投入的货币会自动经过边沿检测并输出一个在时钟上升沿到1&#x…

怎样寻找SEO服务商,需要注意那些问题?

网上提供SEO服务的公司或个人多如牛毛&#xff0c;随便在搜索引擎上搜索一下&#xff0c;成千上万的公司就在眼前。大部分网站设计公司也兼职SEO服务&#xff0c;寻找合适的SEO服务商并不简单&#xff0c;鉴别合格的SEO服务商是关键。 1、确定外包任务 如果没有SEO团队&…

单表查询练习

查看表的字符集编码 show create table tbname; 查看系统默认字符集 SHOW VARIABLES LIKE character_set_database; 显示所有可用的字符集 SHOW CHARACTER SET; 修改系统默认字符集 ①在 /etc/my.cnf 文件中的 [mysqld] 下添加&#xff1a; ②重启数据服务 systemctl re…

火车头采集器AI伪原创[php源码]

本文介绍php版本的火车头采集器AI伪原创&#xff0c;对于网站的原创内容&#xff0c;站长朋友们一定很头疼。作为一个草根站长&#xff0c;自己写原创文章太累了。当然&#xff0c;我并不是说你不能写。自己写原创文章是不现实的。时间是最大的问题。 也许有的站长朋友会问&…

Zabbix(二)

Zabbix(二) 一、部署代理服务器 1.作用 分布式监控的作用&#xff1a; ●分担 server 的集中式压力 ●解决多机房之间的网络延时问题2.步骤 2.1部署代理服务器端 systemctl disable --now firewalld setenforce 0 hostnamectl set-hostname zbx-proxy//设置 zabbix 的下载…

【数据结构】双向带头循环链表

⭐️ 往期相关文章 ✨链接1&#xff1a;数据结构和算法的概念以及时间复杂度空间复杂度详解 ✨链接2&#xff1a;【数据结构】手撕顺序表(动态版)代码详解 ✨链接3&#xff1a;【数据结构】手撕单链表代码详解 ⭐️ 双向带头循环链表 图解&#xff1a; 双向&#xff1a; 链表…

LVS简介及LVS-NAT负载均衡群集的搭建

目录 一、LVS群集简介 1.群集的含义和应用场景 2.性能扩展方式 3.群集的分类 负载均衡&#xff08;LB&#xff09; 高可用&#xff08;HA&#xff09; 高性能运算&#xff08;HPC&#xff09; 二、LVS负载均衡群集简介及搭建 1.负载均衡群集架构 2.三种工作模式 3.启…

C++教程(一)开发环境visual studio的安装——图文详细

一、visual studio下载地址&#xff1a; 1、百度网盘 链接&#xff1a;https://pan.baidu.com/s/1QJosSoAT7EumuvyjtC_1Iw?pwdwuqz 提取码&#xff1a;wuqz 2、官网下载 Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)https://visualstudio.…