RabbitMQ(四) ——路由
RabbitMQ(四)
——路由
(转载请附上本文链接——linhxx)
一、概述
路由模式(routing)是交换机不将消息广播到全部的队列中,而是采用交换机的另一种模式——direct。该模式下,交换机会精准的将消息发送到某个与其绑定的队列,而不是发送给全部队列。
如果没有队列绑定交换机,消息会丢失。
路由模式如下图所示:
二、绑定方式(binding)
在交换机的fanout模式下,不需要routing key,但是在此模式下,由于交换机需要精准的将消息发送给某个(某些)队列,则需要队列与交换机进行绑定。
绑定方式如下:
$routing_key = 'black';
$channel->queue_bind($queue_name, $exchange_name, $routing_key);
这样绑定后,当生产者指定的routing key是‘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
更多最新文章,欢迎关注微信公众号“决胜机器学习”,或扫描右边二维码。