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

RabbitMQ(四) ——路由

路由 key eve lar enter align queue bit 機會

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