来自rabbitMQ队列的批处理消息

zon*_*nda 6 python rabbitmq

我的RabbitMQ集群中有一个请求流,以及处理它们的多个消费者.问题是 - 每个消费者必须出于性能原因批量处理请求.具体来说,有一个网络IO操作,我可以通过批处理请求来分摊.

因此,每个消费者都希望最大化它可以批量处理的请求数量,但不会增加太多的延迟.

当消费者收到第一个请求并继续收集请求时,我可能会启动一个计时器,直到两个事件中的一个发生 - 计时器到期或已收到500个请求.

有没有更好的方法来实现这一目标 - 不会阻止每个消费者?

Sin*_*ion 6

通常,"批处理消息"的网络方面是在basic.qos(prefetch-size, prefetch-count)参数级别处理的.在此方案中,代理将为消费者发送超出未确认消息的一些字节/消息(分别),但是客户端库在进程中一次一个地向应用程序发送消息.

为了最大化利益,应用程序可以保留basic.ack()每条消息,并定期发出basic.ack(delivery-tag=n, multiple=True)以确认所有带有传递标记<= n的消息.