使用皮卡(pika)操作RabbitMQ

简介

  众所周知,RabbitMQ是一个开源的高性能的消息队列,支持多种开发语言:Java,Python,.Net,C,C++,PHP等多种语言,那么如何通过Python语言调用RabbitMQ呢?Python中pika这个模块提供了完整的调用方法,通过这个包我们可以实现Rabbit的简单模式,交换机模式以及一些特殊的参数。那么我们如何使用pika模块呢,接下来,请看听我慢慢道来。

一、简单模式

生产者
  • 简单模式下,有多个消费者时,采用轮询方式处理消息。
import pika

if __name__ == '__main__':
    # 创建凭证,使用rabbitmq用户密码登录
    credentials = pika.PlainCredentials("lhx", "123456")
    cpara = pika.ConnectionParameters(host='111.204.156.11', port=9015, credentials=credentials)
    connection = pika.BlockingConnection(cpara)
    # 创建频道
    channel = connection.channel()
    # 新建一个queue1队列,用于接收消息
    channel.queue_declare(queue='queue1')
    
    # 注意在rabbitmq中,消息想要发送给队列,必须经过交换(exchange),
    # 初学可以使用空字符串交换(exchange=''),
    # 它允许我们精确的指定发送给哪个队列(routing_key=''),
    # 参数body值发送的数据
    channel.basic_publish(exchange='',
                          routing_key='queue1',
                          body='哈哈哈。。。')
    print("已经发送了消息")
    # 程序退出前,确保刷新网络缓冲以及消息发送给rabbitmq,需要关闭本次连接
    connection.close()
消费者
import pika

if __name__ == '__main__':
    # 建立与rabbitmq的连接
    credentials = pika.PlainCredentials("lhx", "123456")
    cpara = pika.ConnectionParameters(host='111.204.156.11', port=9015, credentials=credentials)
    connection = pika.BlockingConnection(cpara)
    
    # 创建频道
    channel = connection.channel()
    # 生命队列,消费者也要生命队列,因为我们不能确定消费者与生产者谁先启动。
    channel.queue_declare(queue="queue1")

    # 回调函数,里面存放执行内容。
    def callback(ch, method, properties, body):
        print(type(body))
        print(body.decode(encoding='utf-8'))
        print("消费者接收到了任务:%r" % body)


    # 有消息来临,callback,没有消息则夯住,等待消息
    channel.basic_consume(on_message_callback=callback, queue='queue1', auto_ack=True)
    # 开始消费,接收消息
    channel.start_consuming()
  • 公平分发 此模式下,如果有多个消费者,将轮询获取消息,不会考虑消费者的消费能力,那么如何让高性能的消费者接受更多的任务呢,此时,可设置公平分发机制:
    消费者中加入以下代码
 # 公平分发参数,根据消费者的性能进行分发
    channel.basic_qos(prefetch_count=1)
  • 取消自动应答:如果消费者消费失败,消息会丢失,此时可以设置取消自动应答,在回调函数结尾处加入如下代码:
    ch.basic_ack(delivery_tag=method.delivery_tag)
    手动应答,如果回调函数处理过程中发生错误,该条语句不会执行,消息回滚,等待下次消费。示例代码如下:
# consumer.py
import pika

if __na
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值