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