Python 一次使用多条消息

Python 一次使用多条消息,python,rabbitmq,pika,Python,Rabbitmq,Pika,我正在使用外部服务(service)来处理某些特定类型的对象。如果我以10个一批的方式发送对象,服务运行得更快。我目前的架构如下。生产者一个接一个地广播对象,一群消费者(一个接一个)从队列中取出对象并将其发送到服务。这显然是次优的 我不想修改生产者代码,因为它可以在不同的情况下使用。我可以修改消费者代码,但这只会增加复杂性。我也知道prefetch\u count选项,但我认为它只在网络级别起作用——客户端库(pika)不允许在消费者回调中一次获取多条消息 因此,RabbitMQ能否在将消息发送

我正在使用外部服务(service)来处理某些特定类型的对象。如果我以10个一批的方式发送对象,服务运行得更快。我目前的架构如下。生产者一个接一个地广播对象,一群消费者(一个接一个)从队列中取出对象并将其发送到服务。这显然是次优的

我不想修改生产者代码,因为它可以在不同的情况下使用。我可以修改消费者代码,但这只会增加复杂性。我也知道
prefetch\u count
选项,但我认为它只在网络级别起作用——客户端库(pika)不允许在消费者回调中一次获取多条消息


因此,RabbitMQ能否在将消息发送给使用者之前创建消息批?我正在寻找类似“一次消费n条消息”的选项。

你不能在使用者回调中对消息进行批处理,但你可以使用线程安全库并使用多个线程来消费数据。这里的优点是,您可以在五个不同的线程上获取五条消息,并在需要时组合数据

作为一个例子,您可以看看我将如何使用AMQP库实现这一点。

那么
预取计数有什么问题?您可以使用
N
消息的数量,对它们进行计数,一旦您的计数超过某个值,就可以一次性处理它们。此外,您还可以批量确认它们。如果队列中只有
n
项怎么办?然后消费者将挂起一段不确定的时间,等待更多的消息排队。在我的例子中,这是一个关键问题。您可以在每条消息之后检查队列长度,或者引入某种计时器,除了计算消息之外,它将每隔“K”秒处理所有消息。是的,这正是我所说的“额外复杂性”。谢谢你指出这一点。现在,我知道我至少有一个合理的解决方案。我将使用它来创建自定义预取逻辑,谢谢