1. 程式人生 > >Python-RabbitMQ(簡單發送模型)

Python-RabbitMQ(簡單發送模型)

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(簡單發送模型)