更新時間:2023-05-11 來源:黑馬程序員 瀏覽量:
RabbitMQ是一個功能強大的消息隊列中間件,支持多種消息廣播類型。常見的幾種廣播類型包括:Direct Exchange、Fanout Exchange、Topic Exchange 和 Headers Exchange。
下面是一個基于Python的RabbitMQ代碼演示,展示如何使用Fanout Exchange實現消息廣播:
首先,安裝pika庫:
pip install pika
然后,創建一個名為broadcast.py的Python文件,代碼如下:
import pika import sys # 建立連接 connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost')) channel = connection.channel() # 創建一個Fanout Exchange channel.exchange_declare(exchange='logs', exchange_type='fanout') # 構造消息內容 message = ' '.join(sys.argv[1:]) or "Hello World!" # 發布消息到Exchange channel.basic_publish(exchange='logs', routing_key='', body=message) print(" [x] Sent %r" % message) # 關閉連接 connection.close()
在上面的代碼中,我們首先建立了一個與RabbitMQ服務器的連接,并創建了一個名為logs的Fanout Exchange。然后,我們構造了一個消息內容,并將其發布到Exchange中。
我們可以使用命令行運行此腳本,并在命令行參數中傳遞消息內容,例如:
python broadcast.py "This is a broadcast message."
這樣,RabbitMQ服務器將會廣播這條消息給所有已經綁定到logs Exchange的隊列。
下面是一個基于Python的RabbitMQ代碼演示,展示如何使用Topic Exchange實現消息廣播:
import pika import sys # 建立連接 connection = pika.BlockingConnection( pika.ConnectionParameters(host='localhost')) channel = connection.channel() # 創建一個Topic Exchange channel.exchange_declare(exchange='logs_topic', exchange_type='topic') # 構造消息內容 message = ' '.join(sys.argv[2:]) or "Hello World!" routing_key = sys.argv[1] if len(sys.argv) > 1 else 'anonymous.info' # 發布消息到Exchange channel.basic_publish(exchange='logs_topic', routing_key=routing_key, body=message) print(" [x] Sent %r:%r" % (routing_key, message)) # 關閉連接 connection.close()
在上面的代碼中,我們創建了一個名為logs_topic的Topic Exchange,并構造了一個消息內容和一個routing key。routing key是一個用于匹配隊列的關鍵字。在Topic Exchange中,routing key可以是一個由點號分隔的單詞列表。例如,"stock.usd.nyse"是一個有效的routing key。
我們可以使用命令行運行此腳本,并在命令行參數中傳遞routing key和消息內容,例如:
python broadcast_topic.py "anonymous.info" "This is a broadcast message."
這樣,RabbitMQ服務器將會廣播這條消息給所有已經綁定到與該routing key匹配的logs_topic Exchange的隊列。