Python操作rabbitmq系列(一)
從本文開始,接下來的內容,我們將討論rabbitmq的相關功能。我的這些文章,最終是要實現一個項目(具體是什麼暫不透露)。前面每一篇,都是在為這個系統做準備。rabbitmq,是我們這個項目的關鍵部分之一。所以牛小妹,這個系列,請務必搞懂rabbitmq是怎麼回事,並知道,該如何操作。
在這一篇文章里,我們知道rabbitmq簡單邏輯即可。
生產消息:
消費消息:
就跟QQ一樣,我在這邊發,並不是直接發給你,而是發給了中間的伺服器,你接收也不直接從我這裡接,從伺服器去取。
上圖紅色部分,就是隊列,隊列就是用來緩衝消息的。這樣,我們雙邊不斷發消息,就不會讓自己受阻。
在開始編碼實踐之前。我們需要安裝rabbitmq server和python client。
安裝rabbitmq server參考文章
安裝python client:使用pip install pika
安裝完後,我們就可以嘗試官方文檔的demo:
發送端:
import pika
#連接隊列伺服器connection = pika.BlockingConnection(pika.ConnectionParameters(host=localhost))channel = connection.channel()#創建隊列。有就不管,沒有就自動創建channel.queue_declare(queue=hello)
#使用默認的交換機發送消息。exchange為空就使用默認的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()# rabbitmq消費端仍然使用此方法創建隊列。這樣做的意思是:若是沒有就創建。和發送端道理道理。目的是為了保證隊列一定會有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()收到的消息:
然後回頭看伺服器管理台:
消息被消費後,隊列就相應的移除。
今天,我們就對rabbitmq入門以下即可。在下一章,我們將討論用於在多個工作人員之間分配耗時的任務。這個在並發比較高的web應用中尤為有用。
備註:代碼來源於官方文檔。因為是英文,專業性較強,有些同學看起吃力,這裡就我司的實際運用後的理解,重新闡述一遍,希望它更容易學習。
推薦閱讀:
※cort_proto v0.9.0 第一版發布
※遲來的HTTP2簡明教程
※golang簡單key/value資料庫(二)
※Redis常見的應用場景解析