Python操作RabbitMq

时间:2020-03-26
本文章向大家介绍Python操作RabbitMq,主要包括Python操作RabbitMq使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一:生产者消费者模型

对于RabbitMQ来说,生产和消费不再针对内存里的一个Queue对象,而是某台服务器上的RabbitMq Server实现的消息队列。

生产者(producter):用来产生数据 并将数据发送到队列中

import pika  # 引入mq包
import time

credentials = pika.PlainCredentials('SR', '123456')  # 如果需要远程连接mq服务需要传入用户名密码进行验证

connection = pika.BlockingConnection(pika.ConnectionParameters(host='127.0.0.1', port=5672))  # 创建mq的连接

channel = connection.channel()  # 声明一个频道

res = channel.queue_declare(queue='SR')  # 创建一个队列 队列名称SR
print(res)  # <METHOD(['channel_number=1', 'frame_type=1', "method=<Queue.DeclareOk(['consumer_count=0', 'message_count=0', 'queue=SR'])>"])>

for i in range(5):
    message = 'hello world%s' % i
    # 向队列插入数值 routing_key是队列名
    # body传入的数据
    channel.basic_publish(exchange='', routing_key='SR', body=message)

connection.close()  # 关闭链接通道

消费者(consumer):队列消息的接收者,负责 接收并处理 消息队列中的消息

import pika
import time

credentials = pika.PlainCredentials('SR', '123456')  # 如果需要远程连接mq服务需要传入用户名密码进行验证

connection = pika.BlockingConnection(pika.ConnectionParameters(host='127.0.0.1', port=5672))  # 创建mq的连接

channel = connection.channel()  # 声明一个频道

res = channel.queue_declare(queue='SR')  # 创建一个队列 队列名称SR 防止生产者没有队列 消费者不知道从哪个队列取数据


def callback(ch, method, properties, body):
    print(ch)  # <BlockingChannel impl=<Channel number=1 OPEN conn=<SelectConnection OPEN transport=<pika.adapters.utils.io_services_utils._AsyncPlaintextTransport object at 0x000000000C6CDDD8>
    print(method)  # <Basic.Deliver(['consumer_tag=ctag1.d109b32cf17d46ca92c3d3a96d280df7', 'delivery_tag=1', 'exchange=', 'redelivered=False', 'routing_key=SR'])>
    print(properties)  # <BasicProperties>
    print(body)  # b'hello world0' 二进制数据


# 告诉rabbitmq,用callback来接收消息
channel.basic_consume(
    queue='SR',  # 指定队列名
    on_message_callback=callback  # 从队列里获取消息
)

# 开始接收信息,并进入阻塞状态,队列里有信息才会调用callback进行处理
channel.start_consuming()

原文地址:https://www.cnblogs.com/SR-Program/p/12573159.html