1. 程式人生 > >RabbitMQ官網教程1——Hello World

RabbitMQ官網教程1——Hello World

        RabbitMQ是一個訊息中介軟體——接收和傳送訊息。你可以把它想象成一個郵局,當你把郵件投遞到郵箱後,你就可以確信郵遞員最終會幫你把郵件寄給收件人。

術語:

        生產者——傳送訊息;

        佇列:“郵箱”,存在於RabbitMQ內。雖然訊息可以在RabbitMQ及應用中流轉,但是隻能在佇列中儲存,佇列沒有限度,可以儲存任意多的訊息,多個生產者可以向一個佇列中傳送訊息,多個消費者也可以一個佇列中接收訊息;

        消費者——接收訊息;

生產者消費者訊息中介軟體多數情況下不在同一臺機器上。

基於Python客戶端pika實現Hello World程式——簡單的傳送接收訊息。

        傳送端:首先與RabbitMQ服務建立連線,之後在傳送訊息前我們需要確保接收佇列存在,如果向一個不存在的佇列傳送訊息,RabbitMQ將會丟棄。在RabbitMQ中,訊息不能直接傳送給佇列,而是需要通過一個交換機(exchange)。現在先使用預設交換機,它允許我們通過routing_key引數精確指定要發往的佇列。退出程式前,我們需要確保網路快取被flush,訊息被投遞到RabbitMQ。關閉連線可以達到該效果。

        接收端:首先也是連線到RabbitMQ服務,確保佇列存在。使用queue_declare建立佇列是等冪操作,可以呼叫多次,只有一次成功建立。這種重複建立是有道理的,因為我們不確定哪個程式先啟動,所以在兩邊都建立是一個很好的經驗。如果你想檢視一下RabbitMQ中有什麼佇列以及佇列中有多少訊息,可以使用rabbitmqctl工具: sudo rabbitmqctl list_queues。從佇列接收訊息相對複雜,需要向佇列註冊一個回撥函式。當收到訊息後,回撥函式會被pika庫呼叫。為了註冊成功,必須確保訂閱的佇列存在。最後開啟一個迴圈,等待資料。

傳送端:

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='hello')

channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()

接收端:
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='hello')

def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)

channel.basic_consume(callback, queue='hello', no_ack=True)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()