RabbitMQ入门学习系列(五) Exchange的Direct类型
快速阅读
利用Exchange的Direct类型,实现对队列的过滤,消费者启动以后,输入相应的key值,攻取该key值对应的在队列中的消息 。
从一节知道Exchange有四种类型
Direct,Topic,headers,fanout
前面我们说了fanout类型,可以把消息发送给所有的消费者,
在用Fanout类型的时候,我们绑定的时候是没有指定Routing key的【空值】
channel.BasicPublish(exchange: "logs",routingKey: "",basicProperties: null,body: body);
这次我们说一下Direct类型
Exchange的Direct类型将与队列中的routing key进行精确的匹配。
生产者代码
- 创建连接和信道
- 声明交换器名字和指定类型为direct
- 发送routingkey=rk1 和rk2的消息各五次
static void Main(string[] args)
{var factory = new ConnectionFactory() { HostName = "localhost" };using (var connection = factory.CreateConnection())using (var channel = connection.CreateModel()){channel.ExchangeDeclare(exchange: "directType1", type: "direct");for (var i = 0; i < 5; i++){string message = "Hello World!this rk1 message " + i;var body = Encoding.UTF8.GetBytes(message);var properties = channel.CreateBasicProperties();properties.Persistent = true;channel.BasicPublish(exchange: "directType1",routingKey: "rk1",basicProperties: null,body: body);Console.WriteLine(" [x] Sent {0},id={1}", message,i);Thread.Sleep(1000);}for (var i = 0; i < 5; i++){string message = "Hello World!this rk2 message " + i;var body = Encoding.UTF8.GetBytes(message);var properties = channel.CreateBasicProperties();properties.Persistent = true;channel.BasicPublish(exchange: "directType1",routingKey: "rk2",basicProperties: null,body: body);Console.WriteLine(" [x] Sent {0},id={1}", message, i);Thread.Sleep(1000);}}Console.WriteLine(" Press [enter] to exit.");Console.ReadLine();
}
消费者代码
- 输入要查看的消息类型,支持rk1 和rk2
- 创建连接和信道
- 声明交换器名字和指定类型为direct
- 指定队列名称,并且把routingkey的值赋值给控制台手动需要输入的rk1或者rk2
- 接收消息并回馈,和fanout类型一样的代码了。
static void Main(string[] args)
{bool flag = true;string level = "";while (flag){Console.WriteLine("请选择要查看的消息类型");level = Console.ReadLine();if (level == "rk1" || level == "rk2" )flag = false;elseConsole.Write("仅支持rk1与rk2");}var factory = new ConnectionFactory() { HostName = "localhost" };using (var connection = factory.CreateConnection()){using (var channel = connection.CreateModel()){channel.ExchangeDeclare(exchange: "directType1", type: "direct");var queueName = channel.QueueDeclare().QueueName;channel.QueueBind(queue: queueName, exchange: "directType1", 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();}}
查看结果
我们看到生产者分别生产了五条rk1和五条rk2的消息
消费者1输入只查看rk1的消息,成功获得了rk1的消息
同样的
消费者2输入只查看rk2的消息,成功获得了rk2的消息
要注意的是先把先消费者启动起来
友情提示
我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题。可以直接在公众号《爱码农爱生活 》留言。必定会再次复查原因。让每一篇 文章的流程都能顺利实现。
RabbitMQ入门学习系列(五) Exchange的Direct类型相关推荐
- RabbitMQ入门学习系列(六) Exchange的Topic类型
快速阅读 介绍exchange的topic类型,和Direct类型相似,但是增加了"."和"#"的匹配.比Direct类型灵活 Topic消息类型 特点是:to ...
- RabbitMQ入门学习系列(二),单生产者消费者
友情提示 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题.可以直接在公众号<爱码农爱生活 >留言.必定会再次 ...
- RabbitMQ入门学习系列(四) 发布订阅模式
什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道消息发送到队列 ...
- RabbitMQ入门学习系列(三).消息发送接收
快速阅读 用Rabitmq的队列管理,以及如何保证消息在队列中不丢失.通过ack的消息确认和持久化进行操作.以及Rabbit中如何用Web面板进行管理队列.消费者如何处理耗时的任务 生产者代码创建链接 ...
- RabbitMQ(四):Exchange交换器--direct
内容翻译自:RabbitMQ Tutorials Java版 RabbitMQ(一):Hello World程序 RabbitMQ(二):Work Queues.循环分发.消息确认.持久化.公平分发 ...
- Android音视频学习系列(五) — 掌握音频基础知识并使用AudioTrack、OpenSL ES渲染PCM数据
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- OpenGL入门学习(十五)
OpenGL入门学习[十五] 这次讲的所有内容都装在一个立方体中,呵呵. 呵呵,绘制一个立方体,简单呀,我们学了第一课第二课,早就会了. 先别着急,立方体是很简单,但是这里只是拿立方体做一个例子,来说 ...
- React Native小白入门学习路径——五
React Native小白入门学习路径--五 序 "哦天呐!" 这句话成了我在实验室的口头禅, 老师可能觉得我们都是大神吧,都还在看着基础就给布置了那么多任务:写一个RN的TDD ...
- Asp.Net MVC5入门学习系列⑤
Asp.Net MVC5入门学习系列⑤ 原文:Asp.Net MVC5入门学习系列⑤ 检查VS生产的编辑方法和编辑窗体 前面我们一步使用强类型,然后创建Controller(控制器)的时候,VS默认已 ...
最新文章
- 如何更改Joomla中的默认语言
- visualstudio调试html,Visual Studio Code中调试JavaScript
- branch and bound(分支定界)算法-基础概念
- VC学习笔记:简单绘图
- 电商网站交易记录设计
- MySQL创始人发邮件寻求中国帮助
- EXCEL柱状图制作(三)
- 有限元分析类毕业论文文献(推荐10篇)
- Java并发编程:volatile关键字解析 by 海子
- python 等差素数数列
- Unity报错之【发布UWP显示“Could not find any supported UWP SDK installations”】
- 【JavaScript】时间与时间戳相互转换
- 告诉你苹果手机如何录屏的同时录音
- Vim指令对应的英语全称
- 前端学习打卡day05
- 使用 redis 中的 lzf 压缩算法
- Android系统应用隐藏和应用禁止卸载
- 小车高速怎么收费标准_2018小轿车高速路收费标准 私家车走高速怎么收费
- 用AI脑补慢动作,30帧秒变120帧,轻松看清“松果糖豆五连鞭”动作细节
- 【漏洞复现】phpStudy 小皮 Windows面板 RCE漏洞
热门文章
- Silver Cow Party(POJ-3268)
- 已知先序和中序得出后序
- 33 SD配置-销售凭证设置-定义销售凭证的号码范围
- 10 MM配置-主数据-定义物料类型
- 34 CO配置-控制-产品成本控制-成本对象控制-期末结算-检查差异变式
- 49 FI配置-财务会计-固定资产-与总账集成-分配总帐科目
- list vue 删除后页面渲染_Vue项目中v-for数组删除第n项元素产生渲染错误问题及解决方法...
- 光敏电阻控制led亮度程序_单片机开发系统学习LED亮度控制原理
- visual studio2019的安装以及使用
- 模型计算量(FLOPs)和参数量(Params)的理解