1. 程式人生 > 其它 >RabbitMQ(四) ——路由

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