python使用pika操作rabbitmq编程入门(二)

本文详细介绍了使用pika库在Python中操作RabbitMQ的步骤,包括生产者和消费者的创建,轮询接收消息,消息确认,消息持久化,设置客户端QOS,发布订阅模式,以及主题交换机的使用。通过实例代码展示了如何实现RabbitMQ的重要功能,确保消息的可靠传输和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pika生产者程序大致步骤:
1. 建立连接connection , 需要认证的调用认证参数
2. 创建通道channel  当然 channel可以池化,这样可以重复使用
3. 声明队列   指定队列属性, 一旦指定属性不能修改, 例如是否持久化,名称
4. 声明交换机  交换机类型,名称等, 也可以不用声明,直接使用 “” 空字符串,默认交换机也可以
5. 将队列与交换机绑定   queue_bind 
6. basic_publish 发送到交换机 指定路由键
pika消费者程序大致步骤:
1. 建立连接connection , 需要认证的调用认证参数
2. 创建通道channel  当然 channel可以池化,这样可以重复使用
3. 声明队列   指定队列属性, 一旦指定属性不能修改, 例如是否持久化,名称
4. 声明交换机  交换机类型,名称等, 也可以不用声明,直接使用 “” 空字符串,默认交换机也可以
5. 将队列与交换机绑定   queue_bind 
6. basic_consume 消费消息
1. 轮询接收消息

使用消息队列的一个好处就是, 可以将任务消息发送到队列中,由消费者异步进行处理, 同时对于后端消费者可以很容易地增加减少,只需要运行多个进程即可, 方便扩展, 之前的示例中消费端程序就可以开启多个,然后可以看到消费被轮询得分配给每个消费者

将之前的消费者略作更改, 加入客户端编号,启动三个消费者, 通过生产者发送4个消息, 依次收到消息, 即是 轮询(round-robin):

 [*] Waiting for messages. To exit press CTRL+C
1. [x] Received 'Hello World!'
1. [x] Received 'Hello World!'
 [*] Waiting for messages. To exit press CTRL+C
2. [x] Received 'Hello World!'
 [*] Waiting for messages. To exit press CTRL+C
3. [x] Received 'Hello World!'
2. 消息确认:

为了防止消息丢失,RabbitMQ提供了消息响应(acknowledgments)。消费者会通过一个ack(响应),告诉RabbitMQ已经收到并处理了某条消息,然后RabbitMQ就会释放并删除这条消息。 如果消费者(consumer)挂掉了,没有发送响应,RabbitMQ就会认为消息没有被完全处理,然后重新发送给其他消费者(consumer)。这样,及时工作者(workers)偶尔的挂掉,也不会丢失消息。

消息响应默认auto_ack=False, 不自动确认消息, 即是需要我们处理并确认消息的

确认需要发送确认消息:

在回调callback中加入basic_ack

channel.basic_ack(delivery_tag = method.delivery_tag)

如果auto_ack设置为True,而忘记basic_ack消息确认,消息在程序退出之后就会重新发送,如果不及时释放没响应的消息,RabbitMQ就会占用越来越多的内存。

为了排除这种错误,可以使用rabbitmqctl命令,输出messages_unacknowledged字段:

# rabbitmqctl list_queues name messages_ready messages_un
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值