RabbitMQ(四) ——路由

RabbitMQ(四)——路由

(原创内容,转载请注明来源,谢谢)

一、概述

路由模式(routing)是交换机不将消息广播到全部的队列中,而是采用交换机的另一种模式——direct。该模式下,交换机会精准的将消息发送到某个与其绑定的队列,而不是发送给全部队列。

如果没有队列绑定交换机,消息会丢失。

路由模式如下图所示:

二、绑定方式(binding)

在交换机的fanout模式下,不需要routing key,但是在此模式下,由于交换机需要精准的将消息发送给某个(某些)队列,则需要队列与交换机进行绑定。

绑定方式如下:

$routing_key ='black';
$channel->queue_bind($queue_name,$exchange_name, $routing_key);

这样绑定后,当生产者指定的routingkey是‘black’,则交换机会将其转发到上述的队列中。

三、多重绑定(multiple bindings)

当交换机的direct模式下,允许一个队列绑定多个routing key,也运行交换机将消息发给多个收听同样routing key的队列。此时,如果每个队列监听的消息是一致的,而生产者发送给交换机的routing key也是这个值,则此模式下的direct模式和fanout模式是一样的,即交换机会把消息转发给所有的队列。

四、发送与接收消息

1、定义交换机

要发送消息,首先定义交换机的时候,需要将其模式定义为direct:

$channel->exchange_declare('direct_logs','direct', false, false, false);

2、发送消息

$severity = ‘test’;
$channel->exchange_declare('direct_logs','direct', false, false, false);
$channel->basic_publish($msg,'direct_logs', $severity);
上述的$severity即routing key。

3、消费者

$severity = ‘test’;
$channel->queue_bind($queue_name,'direct_logs', $severity);

——written by linhxx 2017.08.22

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏博客园迁移

MQ见解

  ActiveMQ默认的使用的协议是openWire,端口号:61616   一条消息从producer端发出之后,一旦被broker正确保存,那么它将会被c...

562
来自专栏北京马哥教育

基础拾遗--【转】什么是长连接、短连接?

什么是长连接,什么是短连接? 贴个经典的,看完了就应该没啥问题了 : TCP/IP通信程序设计的丰富多样性 刚接触TCP/IP通信设计的人根据范例可...

2838
来自专栏安斌的专栏

再说TCP神奇的40ms

本文结合具体的 tcpdump 包,分析触发 delay ack 的场景,相关的内核参数, 以及规避的方案。

10.8K7
来自专栏博客园迁移

JAVA消息确认机制之ACK模式

JMS API中约定了Client端可以使用四种ACK模式,在javax.jms.Session接口中:

633
来自专栏程序猿成长计划

RabbitMQ发布订阅实战-实现延时重试队列

RabbitMQ是一款使用Erlang开发的开源消息队列。本文假设读者对RabbitMQ是什么已经有了基本的了解,如果你还不知道它是什么以及可以用来做什么,建议...

5564
来自专栏北京马哥教育

[干货]集群基础理论讲解|By黑白子童鞋

背景 随着互联网访问量的急剧增加,单台服务器的能力已严重不能满足需求。则需要从两个方面考虑提高服务能力:1、向上扩展,2、向外扩展 向上扩展的缺点: 1、造价高...

3189
来自专栏battcn

一起学设计模式 - 观察者模式

观察者模式是一种使用率极高的模式,用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的...

372
来自专栏Golang语言社区

高性能网络编程7--tcp连接的内存使用

当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。socket编程方法提供了SO_SNDBUF、SO_RCVB...

3106
来自专栏Golang语言社区

高性能网络编程7--tcp连接的内存使用

当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。socket编程方法提供了SO_SNDBUF、SO_RCVB...

3189
来自专栏性能与架构

Java 9 新特性:Reactive Streams

2252

扫描关注云+社区