1. 程式人生 > >python 消息隊列-rabbitMQ 和 redis介紹使用

python 消息隊列-rabbitMQ 和 redis介紹使用

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介紹使用