【问题标题】:Batch message from a rabbitMQ queue来自 rabbitMQ 队列的批处理消息
【发布时间】:2014-03-02 22:02:40
【问题描述】:

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

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

当消费者收到第一个请求时,我可能会启动一个计时器并继续收集请求,直到发生以下两种情况之一 - 计时器到期或收到 500 个请求。

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

【问题讨论】:

    标签: python rabbitmq


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 ifLoop。你会推荐异步回调机制来检索消息或同步获取吗?
    • 您应该始终使用basic.consume 而不是basic.get;预取不适用于basic.get。如果有意义,您应该以异步样式设计您的应用程序,因为 amqp 更适合该模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2013-08-09
    • 1970-01-01
    • 2018-08-04
    相关资源
    最近更新 更多