linux qos mq,Pika + RabbitMQ:将basic_qos设置为prefetch = 1仍然会消耗队列中的所有消息...

在Python中使用RabbitMQ时,遇到一个问题:尽管设置了`basic_qos`预取消息数量为1,但只有一个工作者进程接收并处理所有消息,其他进程处于闲置状态。现象显示所有消息进入'未确认'状态,而不是按预期分散到各个工作者。问题可能与多进程和消息确认机制有关。
摘要由CSDN通过智能技术生成

我有一个python工作者客户端,它可以让10个工人分别挂接到一个RabbitMQ队列中。有点像这样:

#!/usr/bin/python

worker_count=10

def mqworker(queue, configurer):

connection = pika.BlockingConnection(pika.ConnectionParameters(host='mqhost'))

channel = connection.channel()

channel.queue_declare(queue=qname, durable=True)

channel.basic_consume(callback,queue=qname,no_ack=False)

channel.basic_qos(prefetch_count=1)

channel.start_consuming()

def callback(ch, method, properties, body):

doSomeWork();

ch.basic_ack(delivery_tag = method.delivery_tag)

if __name__ == '__main__':

for i in range(worker_count):

worker = multiprocessing.Process(target=mqworker)

worker.start()我遇到的问题是,尽管在频道上设置了basic_qos,但第一个开始的工作人员接受了队列中的所有消息,而其他人则坐在那里闲置。我可以在rabbitmq界面看到这一点,即使我将worker_count设置为1并在队列中存储了50条消息,所有50个都进入'未确认'桶,而我预计1会变成未确认,另外49个准备好了。

为什么这不起作用?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值