码迷,mamicode.com
首页 > 其他好文 > 详细

Rabbitmq-direct演示

时间:2018-08-25 14:00:25      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:inf   ack   路由   错误   dir   算法   控制台   类型   icp   

在上一节中我们创建了一个日志系统。实现将日志消息广播给所有的cusumer。

在这片教程中,我们将为日志系统添加一个功能:仅仅订阅一部分消息。比如:我们可以直接将关键的错误类型日志消息保存到日志文件中,还可以同时将所有的日志消息打印到控制台。

 

绑定(binding)

  在之前的例子中,我们已经创建了绑定:

  channel.queueBind(queueName,EXCHANGE_NAME,"");

  一个绑定是建立在一个队列和一个路由器之间的关系,可以解读为:该队列对这个路由器中的消息感兴趣。

  绑定可以设置另外的参数:路由键(routing key)。为了避免和producer中的void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)中的routingKey混淆,我们将这里的key称为绑定键binding key,下面的代码展示了如何使用绑定键来创建一个绑定关系:

  channel.queueBind(queueName,EXCHANGE_NAME,"black");

  绑定键的含义取决于路由器的类型,我们之前用的fanout类型交换机会忽略该值。

 

直接交换(Direct Exchange)

  我们之前的日志系统会将所有消息广播给所有消费者。现在我们想根据日志的严重程度来过滤日志。比如,我们想要一个程序来将error日志写到磁盘文件中,而不要将warning或info日志写到磁盘中,以免浪费磁盘空间。

  我们之前使用的fanout路由器缺少灵活性,它只是没头脑地广播消息。所以,我们用direct路由器来替换它。direct路由器背后的路由算法很简单:只有当消息的路由键routing key与队列的绑定键binding key完全匹配时,该消息才会进入该队列。

技术分享图片

 

  直接交换机器x与两个队列绑定。第一个队列以绑定键orange来绑定,第二个队列以两个绑定键black和green和交换机绑定。 按照这种设置,路由键为orange的消息以发布给交换机后,将会被路由到队列Q1,路由键为black或者green的消息将会路由到队列Q2。

 

多重绑定(Multiple bindings)

  技术分享图片

  多个队列以相同的绑定键binding key绑定到同一个Exchange上,是完全可以的。按照这种方式设置的话,直接路由器就会像fanout路由器一样,将消息广播给所有符合路由规则的队列。一个路由键为black的消息将会发布到队列Q1和Q2。

Rabbitmq-direct演示

标签:inf   ack   路由   错误   dir   算法   控制台   类型   icp   

原文地址:https://www.cnblogs.com/zhangbLearn/p/9533250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!