Python中如何使用RabbitMQ
producer生产者
Python代码实现
import pika
# 指定远程rabbitmq的用户名密码
username = 'admin'
pwd = '123123'
user_pwd = pika.PlainCredentials(username, pwd)
# 创建连接
s_conn = pika.BlockingConnection(pika.ConnectionParameters('120.27.221.81', credentials=user_pwd))
# 在连接上创建一个频道
chan = s_conn.channel()
# 声明一个队列,生产者和消费者都要声明一个相同的队列,用来防止万一某一方挂了,另一方能正常运行
chan.queue_declare(queue='hello')
chan.basic_publish(exchange='', # 交换机
routing_key='hello', # 路由键,写明将消息发往哪个队列,本例是将消息发往队列hello
body='hello Arvin') # 生产者要发送的消息
print('[生产者] hello Arvin.')
# 当生产者发送完消息后,可选择关闭连接
s_conn.close()
执行代码:
python ./RabbitMQ/send.py
打印消息:
[生产者] hello Arvin.
Ubuntu服务器查看消息
$ rabbitmqctl list_queues
Listing queues ...
hello 1
consumer消费者
代码实现
import pika
# 指定远程rabbitmq的用户名密码
username = 'admin'
pwd = '123123'
user_pwd = pika.PlainCredentials(username, pwd)
# 创建连接
s_conn = pika.BlockingConnection(pika.ConnectionParameters('192.168.1.240', credentials=user_pwd))
# 在连接上创建一个频道
chan = s_conn.channel()
# 声明一个队列,生产者和消费者都要声明一个相同的队列,用来防止万一某一方挂了,另一方能正常运行
chan.queue_declare(queue='hello')
# 定义一个回调函数,用来接收生产者发送的消息
def callback(ch, method, properties, body):
print("[消费者] recv %s" % body)
chan.basic_consume(callback, # 调用回调函数,从队列里取消息
queue='hello', # 指定取消息的队列名
no_ack=True) # 取完一条消息后,不给生产者发送确认消息,默认是False的,即 默认给rabbitmq发送一个收到消息的确认,一般默认即可
print('[消费者] waiting for msg .')
# 开始循环取消息
chan.start_consuming()
执行代码:
python ./RabbitMQ/receive.py
打印消息:
[消费者] waiting for msg .
[消费者] recv b'hello Arvin'
[消费者] recv b'hello Ane'
Ubuntu服务器查看消息
$ rabbitmqctl list_queues
Listing queues ...
hello 0