gpt4 book ai didi

python - 使用 Rabbitmq 作为代理, celery worker 在推送 api 或拉 api 上工作吗?

转载 作者:行者123 更新时间:2023-12-05 05:15:31 24 4
gpt4 key购买 nike

从 Rabbitmq 文档中阅读有关消费者的信息 here揭示了消费者获取消息进行处理的两种可能方式:

Storing messages in queues is useless unless applications can consumethem. In the AMQP 0-9-1 Model, there are two ways for applications todo this:

Have messages delivered to them ("push API")
Fetch messages as needed ("pull API")

With the "push API", applications have to indicate interest inconsuming messages from a particular queue. When they do so, we saythat they register a consumer or, simply put, subscribe to a queue.

我只是想知道:

  1. celery worker 的工作方式是什么?
  2. 有没有办法选择/改变方式?

在 Celery 文档中没有找到任何关于此的具体信息。

最佳答案

  1. Celery 使用 push 方法,基于这样一个事实:它将消费者注册到队列中,并保持与代理的长期连接。
  2. 不,据我所知,拉取方法从未真正纳入 Celery 的设计中。

RabbitMQ 文档 has been updated (在问到这个问题之后)要注意推送方法是强烈推荐的选项,而拉/轮询方法“非常低效,在大多数情况下应该避免”。在 related doc ,它说:

Fetching messages one by one is highly discouraged as it is very inefficient compared to regular long-lived consumers. As with any polling-based algorithm, it will be extremely wasteful in systems where message publishing is sporadic and queues can stay empty for prolonged periods of time.

当不需要实时任务/消息时,这种关于极度浪费的说法可能不成立,这样队列就可以按几小时甚至更短的时间间隔轮询和清空,尽管像 Celery/RabbitMQ 这样的解决方案对于此类用例来说可能一开始就有点矫枉过正。

我快速(且有限地)浏览了 Celery 的源代码,我可以说它的架构的很大一部分似乎只是假设正在使用 push 方法。有像心跳机制这样的复杂组件,可以使系统在长时间运行和不可避免的网络故障的情况下更加健壮;在拉取/轮询模式下根本不需要这些组件。

关于python - 使用 Rabbitmq 作为代理, celery worker 在推送 api 或拉 api 上工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51469064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com