一、交換機
1、交換機是什麼?
在 RabbitMQ 中,消息的發送者和接收者都是需要根據特定的規則進行處理,而這個規則的核心就是交換機。交換機決定了消息在 RabbitMQ 中的路由策略,也就決定了消息最終到達哪個隊列。
2、交換機的類型
RabbitMQ 中的交換機有四種類型:
- Direct:直接交換機。
- Topic:主題交換機。
- Header:消息頭交換機。
- Fanout:扇形交換機。
3、交換機的創建
“`python
# 導入所需的 Python 包
import pika
# 建立連接
connection = pika.BlockingConnection(pika.ConnectionParameters(‘localhost’))
# 創建一個通道
channel = connection.channel()
# 創建一個名為 exchange_name 的交換機
channel.exchange_declare(exchange=’exchange_name’, exchange_type=’direct’)
“`
二、使用交換機
1、交換機和隊列之間的綁定
在 RabbitMQ 中,我們常規做法是在消息消費者端來聲明交換機及相應隊列,並將他們綁定在一起。
“`python
# 將 queue_name 隊列綁定到名稱為 exchange_name 的交換機上
channel.queue_bind(exchange=’exchange_name’, queue=’queue_name’, routing_key=’routing_key’)
“`
2、使用交換機發送消息
“`python
# 發佈一個消息到 exchange_name(交換機),並指定 routing_key 路由鍵
channel.basic_publish(exchange=’exchange_name’, routing_key=’routing_key’, body=’Hello World!’)
“`
三、交換機類型
1、Direct Exchange
1)定義
直接交換機(Direct Exchange)是 RabbitMQ 中默認的交換機類型,它通過消息的 Routing Key 來將消息路由到相應的隊列中。
2)應用場景
一般用於一對一的消息發送。
3)創建交換機
“`python
# 創建名為 direct_exchange 的直接交換機
channel.exchange_declare(exchange=’direct_exchange’, exchange_type=’direct’)
“`
4)發送消息
“`python
# 發送消息到名稱為 direct_exchange 的交換機上
channel.basic_publish(exchange=’direct_exchange’, routing_key=’routing_key’, body=’Hello World!’)
“`
2、Topic Exchange
1)定義
主題交換機(Topic Exchange)與 Direct Exchange 類似,但它支持更靈活的匹配模式。
2)應用場景
可以用於多對多的消息發送,比如在一個交換機中綁定多個隊列,根據消息的 Routing Key 匹配相應的隊列進行發送。
3)創建交換機
“`python
# 創建名為 topic_exchange 的主題交換機
channel.exchange_declare(exchange=’topic_exchange’, exchange_type=’topic’)
“`
4)發送消息
“`python
# 發送消息到名稱為 topic_exchange 的交換機上
channel.basic_publish(exchange=’topic_exchange’, routing_key=’secrets.rabbitmq.#’, body=’Hello World!’)
“`
3、Headers Exchange
1)定義
消息頭交換機HeaderValueMatcherPlugin)是根據發送消息的 Headers(消息頭)進行匹配來確定發送到哪個隊列中。
2)應用場景
可以用於多條件匹配的情況,比如根據多個業務參數進行消息的路由。
3)創建交換機
“`python
# 創建名為 headers_exchange 的消息頭交換機
channel.exchange_declare(exchange=’headers_exchange’, exchange_type=’headers’)
“`
4)發送消息
“`python
# 發送消息到名稱為 headers_exchange 的交換機上,並在消息頭中添加 x-match 和 x-header 屬性
channel.basic_publish(exchange=’headers_exchange’, routing_key=”, body=’Hello World!’, properties=pika.BasicProperties(headers={‘x-match’: ‘any’, ‘x-header’: ‘value’}))
“`
4、Fanout Exchange
1)定義
扇形交換機(Fanout Exchange)是一種廣播形式的交換機類型,它會將所有從 Producer 接受到的消息廣播到所有與它綁定的隊列。
2)應用場景
一般應用於產生的消息需要廣播到多個消費者的場景,比如系統異常報警等消息。
3)創建交換機
“`python
# 創建名為 fanout_exchange 的扇形交換機
channel.exchange_declare(exchange=’fanout_exchange’, exchange_type=’fanout’)
“`
4)發送消息
“`python
# 發送消息到名稱為 fanout_exchange 的交換機上,並指定不需要路由鍵
channel.basic_publish(exchange=’fanout_exchange’, routing_key=”, body=’Hello World!’)
“`
四、總結
到此,我們已經完成了 RabbitMQ 交換機的詳細介紹。不同類型的交換機,有不同的業務場景。開發者應根據具體情況選擇適合的交換機類型,並加以應用。
原創文章,作者:ARRAF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/332678.html