文章目录

  • Topics主题模式
  • 代码实现
  • 测试
  • 总结
  • 下一章

Topics主题模式

  • 交换机类型为 topics
    - 将路由和某个模式匹配,# 匹配一个或者多个,* 匹配一个。例如交换机绑定的routing key为 zou.insert zou.delete,zou.insert.more,则zou.#都能获得,而zou.*只能匹配到 zou.insert zou.delete
  • 主题模式有点类似直接模式,但是绑定的routing key有两种特殊情况
    1.*可以代替一个单词。
  1. 可以替代零个或多个单词

代码实现

TopicsProducer 生产者

//生产者  交换机类型为Topics类型
public class TopicsProducer {//交换机名称private static final String DESTINATION_NAME = "topics_destination";//routing keyprivate static final String ROUTING_KEY = "zou.insert";private static final String ROUTING_KEY1 = "zou.insert.more";public static void main(String[] args) throws Exception{//1.建立连接Connection connection = MQConnectionUtils.newConnection();//2. 创建通道Channel channel = connection.createChannel();//3.生产者绑定交换机 参数1. 交换机名称 2.交换机类型 directchannel.exchangeDeclare(DESTINATION_NAME, "topic");//4. 创建消息String msg = "topics_destination" + "发送消息";//5.发送消息 参数1为交换机名 2 为这里routingKey 3.为消息基本属性  4.为消息//这里绑定routing key为 severitychannel.basicPublish(DESTINATION_NAME,ROUTING_KEY,null, msg.getBytes());//6. 关闭通道和连接channel.close();connection.close();}
}

短信消费者CustomerSmsTopics

public class CustomerSmsTopics {//队列名称private static final String SMS_QUEUE = "msm_fanout";//交换机名称private static final String DESTINATION_NAME = "topics_destination";//routing keyprivate static final String ROUTING_KEY = "zou.#";public static void main(String[] args) throws Exception{System.out.println("短信消费者启动");//1.建立连接Connection connection = MQConnectionUtils.newConnection();//2. 创建通道Channel channel = connection.createChannel();// 3.声明消费队列channel.queueDeclare(SMS_QUEUE, false, false, false, null);//4.消费者绑定交换机   参数1 队列 参数2交换机 参数3 routingKeychannel.queueBind(SMS_QUEUE, DESTINATION_NAME, ROUTING_KEY);//5.消费者监听消息DefaultConsumer defaultConsumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {String msg = new String(body, "UTF-8");System.out.println("短信消费者获取消息" + msg);}};channel.basicConsume(SMS_QUEUE, true, defaultConsumer);}
}

邮件消费者 CustomerEmailTopics

public class CustomerEmailTopics {//队列名称private static final String EMAIL_QUEUE = "email_topics";//交换机名称private static final String DESTINATION_NAME = "topics_destination";//routing keyprivate static final String ROUTING_KEY = "zou.*";public static void main(String[] args) throws Exception{System.out.println("邮件消费者启动");//1.建立连接Connection connection = MQConnectionUtils.newConnection();//2. 创建通道Channel channel = connection.createChannel();// 3.声明消费队列channel.queueDeclare(EMAIL_QUEUE, false, false, false, null);//4.消费者绑定交换机   参数1 队列 参数2交换机 参数3 routingKeychannel.queueBind(EMAIL_QUEUE, DESTINATION_NAME, ROUTING_KEY);//5.消费者监听消息DefaultConsumer defaultConsumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {String msg = new String(body, "UTF-8");System.out.println("邮件消费者获取消息" + msg);}};channel.basicConsume(EMAIL_QUEUE, true, defaultConsumer);}
}

测试

这里我们可以看到如下特点

  1. 邮件消费者绑定的routing key 为 zou.*
  2. 短信消费者绑定的routing key 为 zou.#

我们测试生产者首先绑定的routing key 为 zou.insert,两个消费者都能接受到消息
然后我们测试生产者绑定的routing key 为 zou.insert.more 只有短信消费者能收到消息

总结

自此rabbitmq主要实用的模式已全部完成,我们从官网可以看到还有如下两种模式

这两种暂时用到的不多 暂时不过多研究

下一章

rabbitmq入门(五)rabbitmq整合springboot(Routing、Topics)

rabbitmq入门(四)Topics主题模式相关推荐

  1. 消息队列RabbitMQ入门与5种模式详解

    1.RabbitMQ概述 简介: MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法: RabbitMQ是开源的,实现了AMQP协议的,采用Erlang(面向并发编程语言 ...

  2. linux发布微软消息队列,消息队列RabbitMQ入门与5种模式详解

    1.RabbitMQ概述 简介: MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法: RabbitMQ是开源的,实现了AMQP协议的,采用Erlang(面向并发编程语言 ...

  3. RabbitMQ的四种交换机模式

    一.RabbitMQ的简单介绍 RabbitMQ作为一个消息队列,它负责提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全可靠. 消息(Message)由Client(客户端)发送,Ra ...

  4. RabbitMQ入门-Routing直连模式

    Hello World模式,告诉我们如何一对一发送和接收消息: Work模式,告诉我们如何多管齐下高效的消费消息: Publish/Subscribe模式,告诉我们如何广播消息 那么有没有灵活强一点的 ...

  5. RabbitMQ入门到进阶

    1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...

  6. RabbitMQ入门到进阶(Spring整合RabbitMQSpringBoot整合RabbitMQ)

    1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 2.为什么要 ...

  7. RabbitMQ六种队列模式-主题模式

    前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列模式-主题 ...

  8. 【转】RabbitMQ六种队列模式-5.主题模式

    前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列模式-主题 ...

  9. RabbitMQ入门-Topic模式

    上篇<RabbitMQ入门-Routing直连模式>我们介绍了可以定向发送消息,并可以根据自定义规则派发消息.看起来,这个Routing模式已经算灵活的了,但是,这还不够,我们还有更加多样 ...

最新文章

  1. 初识C语言---(1)
  2. [Python爬虫] scrapy爬虫系列 一.安装及入门介绍
  3. java面试换背景颜色_实习|渣二本Java菜鸡0 Offer的春招血泪史,一定要主动去找实习呀!
  4. java日志——修改日志管理器配置+日志本地化
  5. python文件函数_python文件和文件夹复制函数
  6. java执行完main就结束了吗_为什么main方法中执行完第一个方法完之后,后面的代码都不执行了?...
  7. Ubuntu下编译安装OpenCV 2.4.7并读取摄像头[转]
  8. 阿里巴巴Java开发手册(泰山版)
  9. SQL*Plus 系统变量之36 - PAGES[IZE]
  10. beyond-光辉岁月-国语谐音歌词
  11. oracle ohs是什么,oracle ohs修改https端口
  12. Fortigate飞塔防火墙配置命令
  13. SpringBoot的ResultFul增删改查
  14. java pdf 判断横版、竖版
  15. matlab第四章图像复原与重建
  16. Android动画之Interpolator(插值器)
  17. 【echarts】在柱状图上方显示数值
  18. 如何播放html文件类型,m3u8格式如何播放
  19. 用网盘(dropbox,kuaipan,everbox)保管的git repository
  20. 软件交付过程的思考与总结

热门文章

  1. python 录音_python实现录音功能(可随时停止录音)
  2. 3-javascript
  3. Java学习经典《第一行代码》第二版
  4. 人工智能之知识图谱体系总结
  5. 普通话测试app怎么样可以不交钱_考了几次普通话,仍无法达到理想成绩?
  6. 在此处打开命令窗口 (Open command window here)
  7. 实战:Gateway API-2022.2.13
  8. 两年内5000万台电脑都要换成国产电脑
  9. 分别用if else 以及 switch实现 税收计算
  10. php网站页面显示源码,用PHP显示网站的源代码