RabbitMQ入门学习系列(六) Exchange的Topic类型
快速阅读
介绍exchange的topic类型,和Direct类型相似,但是增加了".“和”#"的匹配。比Direct类型灵活
Topic消息类型
特点是:topic消息类型不能是任意的routing key, 必须是有点"."组成的单词列表。
和dirct类似,最后也是也相应的key进行匹配
例如:speed.color.sepcies
注意可以用*号和#号出现,和我们日常用的正则表达式含义相近
"*"号代表任意一个单词
"#"号代表0个或多个单词
生产者代码
- 创建连接和信道
- 声明exchange类型
- 设置两个routingkey 各自发送两次。一共发送四条消息
static void Main(string[] args)
{var factory = new ConnectionFactory() { HostName = "localhost" };using (var connection = factory.CreateConnection())using (var channel = connection.CreateModel()){channel.ExchangeDeclare(exchange: "topicType", type: "topic");var list = new List<string>();list.Add("www.baidu.com");list.Add("www.google.com");for (var i = 0; i < 2; i++){var routingKey = list[0];string message = "Hello World!this message routingkey is " + routingKey;var body = Encoding.UTF8.GetBytes(message);var properties = channel.CreateBasicProperties();properties.Persistent = true;channel.BasicPublish(exchange: "topicType",routingKey: routingKey,basicProperties: null,body: body);Console.WriteLine(" [x] Sent {0},id={1}", message,i);Thread.Sleep(1000);}for (var i = 0; i < 2; i++){var routingKey = list[1];string message = "Hello World!this message routingkey is " + routingKey;var body = Encoding.UTF8.GetBytes(message);var properties = channel.CreateBasicProperties();properties.Persistent = true;channel.BasicPublish(exchange: "topicType",routingKey: routingKey,basicProperties: null,body: body);Console.WriteLine(" [x] Sent {0},id={1}", message, i);Thread.Sleep(1000);}}Console.WriteLine(" Press [enter] to exit.");Console.ReadLine();
}
消费者代码
- 创建连接和信道
- 为了测试 topic 类型,限制输入中含 有baidu,google两个关键词和发送的routing key相匹配。
- 声明交换器类型
- 队列声明
- 把exchange和队列绑定到信道上
- 接受消息
static void Main(string[] args)
{bool flag = true;string level = "";while (flag){Console.WriteLine("请选择要查看的消息类型");level = Console.ReadLine();if (level.IndexOf(".baidu.")>0 || level.IndexOf(".google.") > 0 )flag = false;elseConsole.Write("不支持你输入的消息");}var factory = new ConnectionFactory() { HostName = "localhost" };using (var connection = factory.CreateConnection()){using (var channel = connection.CreateModel()){channel.ExchangeDeclare(exchange: "topicType", type: "topic");var queueName = channel.QueueDeclare().QueueName;channel.QueueBind(queue: queueName, exchange: "topicType", routingKey: level);//以下是区别生产者的var consumer = new EventingBasicConsumer(channel);consumer.Received += (sender, e) =>{var body = e.Body;var message = Encoding.UTF8.GetString(body);var rk = e.RoutingKey;Console.WriteLine("Received {0},routingKey:{1}", message, rk);Thread.Sleep(3000);//模拟耗时任务 ,Console.WriteLine("Received over");channel.BasicAck(deliveryTag: e.DeliveryTag, multiple: false);};channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);Console.WriteLine("");Console.ReadLine();}}
测试结果
我们启动消费者以后,输入四个routingkey去测试
分别是
.google.#, #.google. , *.google.com, *.baidu.com
分别监听中间是google 或者baidu的消息
结果符合要求
RabbitMQ入门学习系列(六) Exchange的Topic类型相关推荐
- RabbitMQ入门学习系列(五) Exchange的Direct类型
快速阅读 利用Exchange的Direct类型,实现对队列的过滤,消费者启动以后,输入相应的key值,攻取该key值对应的在队列中的消息 . 从一节知道Exchange有四种类型 Direct,To ...
- RabbitMQ入门学习系列(二),单生产者消费者
友情提示 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题.可以直接在公众号<爱码农爱生活 >留言.必定会再次 ...
- RabbitMQ入门学习系列(四) 发布订阅模式
什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道消息发送到队列 ...
- RabbitMQ入门学习系列(三).消息发送接收
快速阅读 用Rabitmq的队列管理,以及如何保证消息在队列中不丢失.通过ack的消息确认和持久化进行操作.以及Rabbit中如何用Web面板进行管理队列.消费者如何处理耗时的任务 生产者代码创建链接 ...
- RabbitMQ(五):Exchange交换器--topic
内容翻译自:RabbitMQ Tutorials Java版 RabbitMQ(一):Hello World程序 RabbitMQ(二):Work Queues.循环分发.消息确认.持久化.公平分发 ...
- Android音视频学习系列(六) — 掌握视频基础知识并使用OpenGL ES 2.0渲染YUV数据
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- Asp.Net MVC5入门学习系列⑤
Asp.Net MVC5入门学习系列⑤ 原文:Asp.Net MVC5入门学习系列⑤ 检查VS生产的编辑方法和编辑窗体 前面我们一步使用强类型,然后创建Controller(控制器)的时候,VS默认已 ...
- Asp.Net MVC5入门学习系列⑥
Asp.Net MVC5入门学习系列⑥ 原文:Asp.Net MVC5入门学习系列⑥ 接着上次的篇幅,我们这篇手动来写一个查询的流程代码! 搜索/查询 流程功能的实现 那现在要做搜索(查询)功能我们第 ...
- WPF入门学习----系列基础教程
WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...
最新文章
- 云南大学计算机网络原理,云南大学软件学院计算机网络原理期中试卷王世普.doc...
- 生成朋友圈转发点赞截图的小工具
- 羊皮卷的故事-第十章-羊皮卷之三
- 下巴长痘痘是什么原因?要怎么解决?(实用教程)
- 调查称HTML5获多数开发者支持 亚太最高
- 屠龙之路_坚持就是胜利_NinthDay
- 在Firefox 58中,WebAssembly组件性能提升了10倍
- php设置上传文件大小限制_php修改上传文件大小限制实例详解
- SecureCRT 连数据库,启动tomcat操作命令
- AJAX POST跨域 解决方案 - CORS(转载)
- 我在优酷 OTT 端做自动化制图
- 使用CURL出现certificate verify failed错误的解决方法
- Java解决找不到主类或者无法加载主类
- STL---二分查找、去重、全排列
- (附源码)计算机毕业设计ssm房屋租赁管理系统
- Ubuntu 编译最新LLVM套件:LLVM 16.0
- sizeof和strlen使用详解
- 恭喜惠州市靖元五金塑胶制品设计有限公司与华信环球再次达成合作!
- gym101431D(传说中的构造(呸))
- 论文笔记:WORD TRANSLATION WITHOUT PARALLEL DATA
热门文章
- linux获取windows的主机名,获取网络许可主机名和主机 ID 的步骤
- OpenJudge NOI 1.2 04:填空:类型转换1
- 信息学奥赛一本通 1041:奇偶数判断 | OpenJudge NOI 1.4 03
- 信息学奥赛一本通(1403:素数对)
- Linux 下的帮助命令
- 26 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义结果分析版本
- 厉害了!VMware ESXi安装记录,附下载
- spring boot 日志乱码_3. Spring Boot日志
- 图片格式之YUV420 转RGB格式(含代码)
- Kafka刚开启就秒退