Python-RabbitMQ(簡單發送模型)
阿新 • • 發佈:2018-06-29
tar 開始 AS lar exchange exc MQ port 本機
RabbitMQ需要 erlang 和pika
發送端:生產者
import pika connection = pika.BlockingConnection( pika.ConnectionParameters(‘localhost‘)) channel =connection.channel()#聲明一個管道,在管道裏發消息 #聲明queue channel.queue_declare(queue=‘hello‘)#在管道裏還得聲明一個隊列 channel.basic_publish(exchange=‘‘, routing_key=‘hello‘,#就是列隊queue名字 body=‘Hello World‘#消息內容 ) print(" [x] Sent ‘Hello World!‘") connection.close()#不用關閉管道,關閉連接就行
接收端:消費者
import pika # 建立到達RabbitMQ Server的connection # 此處RabbitMQ Server位於本機-localhost connection = pika.BlockingConnection(pika.ConnectionParameters( host=‘localhost‘)) channel = connection.channel() # 聲明queue,確認要從中接收message的queue # queue_declare函數是冪等的,可運行多次,但只會創建一次 # 若可以確信queue是已存在的,則此處可省略該聲明,如producer已經生成了該queue # 但在producer和consumer中重復聲明queue是一個好的習慣 channel.queue_declare(queue=‘hello‘) print(‘ [*] Waiting for messages. To exit press CTRL+C‘) # 定義回調函數 # 一旦從queue中接收到一個message回調函數將被調用 # ch:channel # method: # properties: # body:message def callback(ch, method, properties, body): print(" [x] Received %r" % body) # 從queue接收message的參數設置 # 包括從哪個queue接收message,用於處理message的callback,是否要確認message # 默認情況下是要對消息進行確認的,以防止消息丟失。 # 此處將no_ack明確指明為True,不對消息進行確認。 channel.basic_consume(callback, queue="hello", no_ack=True) # 開始循環從queue中接收message並使用callback進行處理 channel.start_consuming()
Python-RabbitMQ(簡單發送模型)