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(四) ——路由