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

更多最新文章,欢迎关注微信公众号“决胜机器学习”,或扫描右边二维码。

博客园这边,我会定期批量发布文章,如果想要实时看到最新的文章,欢迎关注微信公众号"决胜机器学习",里面有我最新的文章。linhxx
原文地址:https://www.cnblogs.com/linhxx/p/8434171.html