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()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章