Python消息隊(duì)列 Python RabbitMQ使用教程

python操作rabbitmq的關(guān)鍵在于理解其消息隊(duì)列流程和工作機(jī)制,安裝pika庫(kù)后即可通過(guò)簡(jiǎn)單步驟實(shí)現(xiàn)消息發(fā)送與接收。首先需安裝pika:pip install pika,并確保rabbitmq服務(wù)運(yùn)行;其次,發(fā)送消息時(shí)需建立連接、打開通道、聲明隊(duì)列并發(fā)送消息;接著,接收消息時(shí)需監(jiān)聽隊(duì)列、定義回調(diào)函數(shù)處理消息,并注意確認(rèn)機(jī)制與連接關(guān)閉;此外,實(shí)際應(yīng)用中應(yīng)關(guān)注異常處理、消息持久化、多消費(fèi)者支持及死信隊(duì)列等特性以提升系統(tǒng)健壯性。掌握這些步驟和注意事項(xiàng)后,python結(jié)合rabbitmq的基礎(chǔ)操作便能快速上手并靈活運(yùn)用。

Python消息隊(duì)列 Python RabbitMQ使用教程

Python 操作 RabbitMQ,其實(shí)不難,關(guān)鍵是要理解消息隊(duì)列的基本流程和 RabbitMQ 的工作機(jī)制。如果你是剛接觸這塊內(nèi)容的新手,這篇文章應(yīng)該能幫你快速上手。


安裝和基本依賴

用 Python 跟 RabbitMQ 打交道,最常用的是 pika 這個(gè)庫(kù)。安裝起來(lái)很簡(jiǎn)單:

pip install pika

裝好之后就可以開始寫代碼了。不過(guò)要確保你的電腦或者服務(wù)器已經(jīng)安裝并運(yùn)行了 RabbitMQ 服務(wù)。如果沒(méi)有的話,可以用 docker 快速啟動(dòng)一個(gè):

立即學(xué)習(xí)Python免費(fèi)學(xué)習(xí)筆記(深入)”;

docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management

這樣你就可以通過(guò)瀏覽器訪問(wèn)管理界面:https://www.php.cn/link/3e5f370ac4b574fbf4c10f16d112919f guest/guest。


發(fā)送消息的基本流程

發(fā)消息的邏輯其實(shí)很直觀。簡(jiǎn)單來(lái)說(shuō)就是建立連接、打開通道、聲明隊(duì)列、然后發(fā)送。

舉個(gè)例子,你想往名為 hello 的隊(duì)列里發(fā)一條消息:

import pika  connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel()  # 聲明隊(duì)列,如果不存在就創(chuàng)建 channel.queue_declare(queue='hello')  # 發(fā)送消息 channel.basic_publish(     exchange='',     routing_key='hello',     body='Hello World!' )  print(" [x] Sent 'Hello World!'") connection.close()

這里有幾個(gè)點(diǎn)要注意:

  • queue_declare 只是確保隊(duì)列存在,可以多次調(diào)用不會(huì)出錯(cuò)。
  • exchange 留空是因?yàn)槲覀兪褂媚J(rèn)交換機(jī)。
  • routing_key 就是隊(duì)列名。
  • 發(fā)完記得關(guān)連接,不然會(huì)占用資源。

接收消息怎么操作

接收端需要一直監(jiān)聽隊(duì)列,有消息來(lái)了就處理。你可以寫一個(gè)回調(diào)函數(shù)來(lái)處理接收到的消息。

比如下面這個(gè)消費(fèi)者代碼:

import pika  def callback(ch, method, properties, body):     print(f" [x] Received {body}")  connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection_channel = connection.channel()  channel.queue_declare(queue='hello')  channel.basic_consume(     queue='hello',     on_message_callback=callback,     auto_ack=True )  print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming()

幾點(diǎn)說(shuō)明:

  • auto_ack=True 表示自動(dòng)確認(rèn)消息已處理完成。如果是 False,你需要手動(dòng)調(diào)用 ch.basic_ack()。
  • start_consuming() 是個(gè)阻塞方法,會(huì)一直等消息。
  • 如果你想退出程序,按 Ctrl+C 即可。

實(shí)際應(yīng)用中的一些注意事項(xiàng)

在實(shí)際項(xiàng)目中,有些細(xì)節(jié)容易被忽略:

  • 連接異常處理:網(wǎng)絡(luò)不穩(wěn)定或 RabbitMQ 重啟時(shí),連接可能會(huì)斷。建議加個(gè)重試機(jī)制,或者用更高級(jí)的庫(kù)如 kombu 來(lái)處理。
  • 消息持久化:如果你希望隊(duì)列和消息在 RabbitMQ 重啟后還存在,要設(shè)置 durable=True。
  • 多個(gè)消費(fèi)者:可以啟動(dòng)多個(gè)消費(fèi)者實(shí)例共同消費(fèi)同一個(gè)隊(duì)列,RabbitMQ 會(huì)輪詢分發(fā)。
  • 死信隊(duì)列(DLQ):用于處理失敗多次的消息,可以避免無(wú)限重試導(dǎo)致系統(tǒng)癱瘓。

這些不是必須一開始就要用上的,但了解它們對(duì)構(gòu)建健壯的消息系統(tǒng)很有幫助。


基本上就這些。Python 結(jié)合 RabbitMQ 的基礎(chǔ)操作并不復(fù)雜,但要真正用好,還得結(jié)合業(yè)務(wù)場(chǎng)景多琢磨。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊10 分享