快速阅读

利用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进行精确的匹配。

生产者代码

  1. 创建连接和信道
  2. 声明交换器名字和指定类型为direct
  3. 发送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();
}

消费者代码

  1. 输入要查看的消息类型,支持rk1 和rk2
  2. 创建连接和信道
  3. 声明交换器名字和指定类型为direct
  4. 指定队列名称,并且把routingkey的值赋值给控制台手动需要输入的rk1或者rk2
  5. 接收消息并回馈,和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类型相关推荐

  1. RabbitMQ入门学习系列(六) Exchange的Topic类型

    快速阅读 介绍exchange的topic类型,和Direct类型相似,但是增加了"."和"#"的匹配.比Direct类型灵活 Topic消息类型 特点是:to ...

  2. RabbitMQ入门学习系列(二),单生产者消费者

    友情提示 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题.可以直接在公众号<爱码农爱生活 >留言.必定会再次 ...

  3. RabbitMQ入门学习系列(四) 发布订阅模式

    什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道消息发送到队列 ...

  4. RabbitMQ入门学习系列(三).消息发送接收

    快速阅读 用Rabitmq的队列管理,以及如何保证消息在队列中不丢失.通过ack的消息确认和持久化进行操作.以及Rabbit中如何用Web面板进行管理队列.消费者如何处理耗时的任务 生产者代码创建链接 ...

  5. RabbitMQ(四):Exchange交换器--direct

    内容翻译自:RabbitMQ Tutorials Java版 RabbitMQ(一):Hello World程序 RabbitMQ(二):Work Queues.循环分发.消息确认.持久化.公平分发 ...

  6. Android音视频学习系列(五) — 掌握音频基础知识并使用AudioTrack、OpenSL ES渲染PCM数据

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  7. OpenGL入门学习(十五)

    OpenGL入门学习[十五] 这次讲的所有内容都装在一个立方体中,呵呵. 呵呵,绘制一个立方体,简单呀,我们学了第一课第二课,早就会了. 先别着急,立方体是很简单,但是这里只是拿立方体做一个例子,来说 ...

  8. React Native小白入门学习路径——五

    React Native小白入门学习路径--五 序 "哦天呐!" 这句话成了我在实验室的口头禅, 老师可能觉得我们都是大神吧,都还在看着基础就给布置了那么多任务:写一个RN的TDD ...

  9. Asp.Net MVC5入门学习系列⑤

    Asp.Net MVC5入门学习系列⑤ 原文:Asp.Net MVC5入门学习系列⑤ 检查VS生产的编辑方法和编辑窗体 前面我们一步使用强类型,然后创建Controller(控制器)的时候,VS默认已 ...

最新文章

  1. 如何更改Joomla中的默认语言
  2. visualstudio调试html,Visual Studio Code中调试JavaScript
  3. branch and bound(分支定界)算法-基础概念
  4. VC学习笔记:简单绘图
  5. 电商网站交易记录设计
  6. MySQL创始人发邮件寻求中国帮助
  7. EXCEL柱状图制作(三)
  8. 有限元分析类毕业论文文献(推荐10篇)
  9. Java并发编程:volatile关键字解析 by 海子
  10. python 等差素数数列
  11. Unity报错之【发布UWP显示“Could not find any supported UWP SDK installations”】
  12. 【JavaScript】时间与时间戳相互转换
  13. 告诉你苹果手机如何录屏的同时录音
  14. Vim指令对应的英语全称
  15. 前端学习打卡day05
  16. 使用 redis 中的 lzf 压缩算法
  17. Android系统应用隐藏和应用禁止卸载
  18. 小车高速怎么收费标准_2018小轿车高速路收费标准 私家车走高速怎么收费
  19. 用AI脑补慢动作,30帧秒变120帧,轻松看清“松果糖豆五连鞭”动作细节
  20. 【漏洞复现】phpStudy 小皮 Windows面板 RCE漏洞

热门文章

  1. Silver Cow Party(POJ-3268)
  2. 已知先序和中序得出后序
  3. 33 SD配置-销售凭证设置-定义销售凭证的号码范围
  4. 10 MM配置-主数据-定义物料类型
  5. 34 CO配置-控制-产品成本控制-成本对象控制-期末结算-检查差异变式
  6. 49 FI配置-财务会计-固定资产-与总账集成-分配总帐科目
  7. list vue 删除后页面渲染_Vue项目中v-for数组删除第n项元素产生渲染错误问题及解决方法...
  8. 光敏电阻控制led亮度程序_单片机开发系统学习LED亮度控制原理
  9. visual studio2019的安装以及使用
  10. 模型计算量(FLOPs)和参数量(Params)的理解