RabbitMQ(四) ——路由
阿新 • • 發佈:2022-05-03
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