python 消息隊列-rabbitMQ 和 redis介紹使用
阿新 • • 發佈:2018-08-26
div soc blocking eth 子進程 處理 llb spa 內存
1、rabbitMQ 與ptyhon 進程queue 區別。進程queue 主要用戶Python父子進程之間或者統一進程不同子進程。rabbit可以用戶不同語言之前的相互交流,socket可以實現同樣功能,但是較為復雜。
2、 rabbitMQ 消息輪訓。一個生產者對多個消費者時候。會自動將消息輪訓給不同消費者。
# Author : xiajinqi import pika connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost")) channel = connetction.channel() channel.queue_declare(queue=‘hello‘) # 1個生產著,三個消費者,會自動輪訓,其中一個消費者宕機後,消息會自動發給其他消費者處理。 channel.basic_publish(exchange=‘‘,routing_key=‘hello‘,body=‘hello world!‘) print("消息已經發送") channel.close() # Author : xiajinqi import pika import time connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost")) channel= connetction.channel() channel.queue_declare(queue=‘hello‘) #避免生產者後啟動,沒有這個隊列報錯。所以在此申明 def callback(ch,method,properties,body): ‘‘‘ :param ch: 管道對象內存地址 :param method: 發消息給誰的申明信息 :param properties: :param body: :return: ‘‘‘ print(ch,method,properties,body) ch.basic_ack(delivery_tag=method.delivery_tag) #執行完以後告訴服務端 # time.sleep(30) pass ## 申明收到調用callbak處理 no_ack 默認為false消息不會丟失,表示需要客戶端回調函數處理完,主動告訴服務端已經處理完。為true斷電消息會丟失 #channel.basic_consume(callback,queue=‘hello‘,no_ack=‘True‘) channel.basic_consume(callback,queue=‘hello‘) print("開始收消息") channel.start_consuming()
3、服務端消息持久化聲明
channel.queue_declare(queue=‘hello1‘,durable=‘True‘) # durable隊列持久化申明 # 1個生產著,三個消費者,會自動輪訓,其中一個消費者宕機後,消息會自動發給其他消費者處理。 #delivery_mode 消息持久化聲明 channel.basic_publish(exchange=‘‘,routing_key=‘hello1‘,body=‘hello world!‘,properties=pika.BasicProperties(delivery_mode=2))
python 消息隊列-rabbitMQ 和 redis介紹使用