RabbitMQ的Topics 通配符模式(Topic)
RabbitMQ的Topics 通配符模式(Topic)
模式说明
- Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。只不过 Topic 类型Exchange 可以让队列在绑定 Routing key 的时候使用
通配符
! - Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert
- 通配符规则:# 匹配一个或多个词,* 匹配不多不少恰好1个词,例如:item.# 能够匹配 item.insert.abc 或者 item.insert,item.* 只能匹配 item.inser
- Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。只不过 Topic 类型Exchange 可以让队列在绑定 Routing key 的时候使用
Topics 通配符模式的图片
- 图解:
- 红色 Queue:绑定的是 usa.# ,因此凡是以 usa. 开头的 routing key 都会被匹配到
- 黄色 Queue:绑定的是 #.news ,因此凡是以 .news 结尾的 routing key 都会被匹配
其实这个Topics 通配符模式是Exchange常见类型之一的
Topic
代码编写生产者(Topic模式)步骤
- 创建工厂
- 设置参数
- 创建连接
- 创建channel(管道)
- 创建队列(这里只创建两个)
- 创建交换机
- 绑定队列和队列
- 发送消息
- 关闭连接
package com.yang;import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Producer_Topics {public static void main(String[] args) throws IOException, TimeoutException {//1. 创建工厂ConnectionFactory factory = new ConnectionFactory();//2. 设置参数factory.setHost("192.168.20.146");factory.setPort(5672);factory.setUsername("test");factory.setPassword("test");factory.setVirtualHost("/test");//3. 创建连接Connection connection = factory.newConnection();//4. 创建管道Channel channel = connection.createChannel();//5. 创建队列String queueName1 = "test_topic_queue1";String queueName2 = "test_topic_queue2";channel.queueDeclare(queueName1,true,false,false,null);channel.queueDeclare(queueName2,true,false,false,null);//6. 创建交换机String exchangeName = "";channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC,true,false,false,null);//7. 绑定队列和交换机/*queueBind(String queue, String exchange, String routingKey)参数:1. queue:队列名称2. exchange:交换机名称3. routingKey:路由键,绑定规则如果交换机的类型为fanout ,routingKey设置为""*/// routing key 系统的名称.日志的级别。//需求: 所有error级别的日志存入数据库,所有order系统的日志存入数据库channel.queueBind(queueName1, exchangeName, "#.error");channel.queueBind(queueName2, exchangeName, "order.*");//8. 发送消息String body = "日志信息:张三调用了findAll方法...日志级别:info...";channel.basicPublish(exchangeName, "order.ss", null, body.getBytes());//9. 释放资源channel.close();connection.close();}
}
- 尝试执行之后(只有queueName2有,因为只有
order.*
符合)
- 发送别的消息
//8. 发送消息String body = "日志信息:张三调用了delete方法...发生错误...error...";channel.basicPublish(exchangeName, "order.error", null, body.getBytes());
- 尝试执行之后(只有queueName1和2都符合)
- 代码编写消费者(Topic模式)步骤(其实不管什么模式消费者基本都这样写,就改改一个地方而已)
- 创建工厂
- 设置参数
- 创建连接
- 创建管道channel
- 接收消息
package com.yang;import com.rabbitmq.client.*;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Consumer_Topics1 {public static void main(String[] args) throws IOException, TimeoutException {// 1. 创建工厂ConnectionFactory factory = new ConnectionFactory();
// 2. 设置参数factory.setHost("192.168.20.146");factory.setPort(5672);factory.setUsername("test");factory.setPassword("test");factory.setVirtualHost("/test");//3. 创建连接Connection connection = factory.newConnection();
// //4. 创建管道Channel channel = connection.createChannel();
// 5. 接收消息String queueName = "test_topic_queue1";Consumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("body:"+new String(body));System.out.println("将日志信息打印到控制台.....");}};channel.basicConsume(queueName,true,consumer);}
}
- 第二个队列只需要队列名改一下就行了!
String queueName = "test_topic_queue2";
- 两个的执行结果
Consumer_Topics1(队列:
test_topic_queue1
)
Consumer_Topics2(队列:
test_topic_queue2
)
- 和我们的需求一样:
所有error级别的日志存入数据库,所有order系统的日志存入数据库
小结
- Topic 主题模式可以实现 Pub/Sub 发布与订阅模式和 Routing 路由模式的功能,只是 Topic 在配置routing key 的时候可以使用通配符,显得更加灵活。
以上就是Topics 通配符模式的全部内容
RabbitMQ的Topics 通配符模式(Topic)相关推荐
- 通配符模式 topic
2019独角兽企业重金招聘Python工程师标准>>> package com.shi.topic;import java.io.IOException; import java.u ...
- 消息队列(四)——rabbitMQ四种工作模式
RabbitMQ工作模式 模式总结: 1.简单模式helloworld 一个生产者,一个消费者,不需要交换机(使用默认交换机) 2.工作队列模式Work Queue 一个生产者,多个消费者(竞争关系) ...
- RabbitMQ消息队列(六):SpringBoot整合之通配符模式
RabbitMQ消息队列(六):SpringBoot整合之通配符模式 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeZQrNHS-1660220618697)(E: ...
- 快速入门RabbitMQ(详细)第二篇:RabbitMQ五种工作模式的使用及总结
4. RabbitMQ工作模式 4.1. Work queues工作队列模式 Work Queues 与入门程序的 简单模式 相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息.应用场景 ...
- RabbitMQ的工作模式Topics 通配符,test测试代
RabbitMQ有以下几种工作模式 : 1.Work queues 工作队列 2.Publish/Subscribe 发布订阅 3.Routing 路由 4.Topics 通 ...
- RabbitMQ通配符模式
通配符模式 一个消息发送者,发送消息 每个消息接收者,都已一个独立的队列 消息会发送到交换机,由交换机发送到队列 根据key,模糊匹配,来接收消息 Send 发送者 package cn.itcast ...
- (需求实战_进阶_04)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试
背景: 为了减轻服务器的压力,现在原有项目的基础上集成消息队列来异步处理消息! 此项目是企业真实需求,项目的代码属于线上生产代码,直接用于生产即可! 此项目采用MQ发送消息模式为:通配符模式,如果对R ...
- rabbitmq入门(四)Topics主题模式
文章目录 Topics主题模式 代码实现 测试 总结 下一章 Topics主题模式 交换机类型为 topics - 将路由和某个模式匹配,# 匹配一个或者多个,* 匹配一个.例如交换机绑定的routi ...
- RabbitMQ的三种模式-----主题模式(Topic)
主题模式(Topic): 任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue 上 1:简述 如上图所示 此类交换器使得来自不同的源头的消息可以到达一 ...
最新文章
- 关于C#开发山寨操作系统,程序语言,浏览器,IDE,Office,Photoshop等大型程序的可行性歪论及意义...
- php 对接 asp,PHP模拟asp中response类实现方法
- 结构体:计算学生平均分
- Codeforces 997E Good Subsegments (线段树)
- oracle中姓名取姓氏,Oracle SQL - 解析一個名稱字符串並將其轉換爲第一個姓氏和名字...
- XMLHttpRequest对象在IE和Firefox中创建方式有没有不同?
- Java 开源库精选(持续更新)
- python print中文_python:print含有中文的list
- MapXtreme 2005 学习心得 缩放比例下不显示图层(十一)
- lisp正负调换_坐标提取lisp程序
- 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——7.4 示例:使用按钮集装饰单选框...
- SUBSTR函数的使用
- 常见损失函数及正则项
- 安装erlang没有bin文件夹_RabbitMQ的安装和使用
- 使用layui中的laypage遇到的各种问题总结
- 直方图均衡化 java,OpenCV Java 直方图均衡化
- 能不用事务就尽量别用
- DPDK应用示例指南简介(汇总)
- OpenCV-Python的文本透视矫正与水平矫正
- STC15内部ADC测电压
热门文章
- Spring boot + maven + jetty9在提交表单的时候出现Form too large
- IDM Computer Solutions(UltraEdit V26.10.0.30、UltraCompare V18.10.0.78、UEStudio、UltraFTP==) 全系列最新破解
- android上传图片被旋转,解决android有的手机拍照后上传图片被旋转的问题
- 基于jira的缺陷自动化报表分析 (四)按人员统计缺陷情况
- Excel 中统计全表所有人名各出现了多少次
- 地理生物结业考_不到30天,初二学年地理、生物结业考试开考,老师们说……...
- 使用Java编写欧式期权理论理论计算公式
- 傻傻分不清:时间趋势项与时间虚拟变量
- 我用python写了个小病毒,老板再也不敢扣我工资啦
- paip QQ音乐导出歌单总结