我正在使用外部服务(服务)来处理某些特定类型的对象。如果我以10个批次发送对象,则服务运行得更快。我目前的架构如下。生产者一个接一个地广播对象,一群消费者从队列中拉出它们(一个接一个)并将它们发送给服务。这显然不是最理想的。
我不想修改生产者代码,因为它可以在不同的情况下使用。我可以修改消费者代码,但只能增加额外的复杂性。我也知道prefetch_count
选项,但我认为它只适用于网络级别 - 客户端库(pika)不允许在消费者回调中同时获取多条消息。
那么, RabbitMQ可以在将消息发送给消费者之前创建批量消息吗?我正在寻找像"消费 n 消息的选项时间"
答案 0 :(得分:4)
您不能在使用者回调中批处理消息,但可以使用线程安全库并使用多个线程来使用数据。这里的优点是您可以在五个不同的线程上获取五条消息,并在需要时合并数据。
作为示例,您可以了解如何使用我的AMQP库实现此功能。 https://github.com/eandersson/amqpstorm/blob/master/examples/scalable_consumer.py