【问题标题】:PHP RabbitMQ Consumer: Prefetch 1PHP RabbitMQ 消费者:预取 1
【发布时间】:2016-08-21 12:27:27
【问题描述】:

为了避免常见的并发问题,我有一个单线程 php 消费者,它们从一个 rabbitMQ 队列中消费多条消息。

基本上相同的 php 脚本执行 X 次并等待新消息。

我的问题是:
假设 因为我的消费者是单线程的我设置了 1 条消息的预取配置是否正确?

PHP Prefetch Count RabbitMQ

因为显然它一次不会处理超过 1 条消息...
正确的?

【问题讨论】:

    标签: php rabbitmq


    【解决方案1】:

    预取只是代理将放置在消费者端并仅在这些消息被确认后删除它们的一些消息。现在,如果我们假设客户端(消费者)当时正在处理一条消息,那么这个数字 prefetch_count 并不是很重要。但是,如果客户端在一个线程中消费消息,然后产生新线程——每个线程处理一条消息,那么显然是另一回事了。所以可以说多线程确认更像是一个故事。
    既然你写了单线程消费者,我很确定你的意思是整个客户端都是单线程的,而不仅仅是“消费”部分,所以我的直接回答您是否可以将其设置为 1,但您不必这样做,这更多地取决于您确认消息的方式。我只是想详细说明多线程处理部分。

    【讨论】:

    • 现在我明白了。我应该详细说明我的问题,因为目前客户端可以使用他想要的所有消息,但是由于消费者的单线程性质,它一次只能处理一个,因此只有一个 ack一次。
    • 没错。这就是为什么当我与同事讨论时,我们总是说“消费”只是将消息传递给客户端,并处理和确认其他内容:)
    猜你喜欢
    • 2023-03-16
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    相关资源
    最近更新 更多