RabbitMQ ——路由

Posted lin_h

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

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

以上是关于RabbitMQ ——路由的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ --- Routing(路由)

Rabbitmq 路由模式

RabbitMQ ——路由

rabbitmq--路由模式

RabbitMQ路由模式(Routing)

RabbitMQ路由模式(Routing)