Rud*_*udy 17 google-app-engine message-queue
我想知道它们之间有什么区别.他们描述的是同一件事吗?
Google App Engine服务任务队列是Message Queue的实现吗?
Rak*_*kib 12
我在Facebook上的一些开发者社区群组中提出了类似的问题.这不是专门针对GoogleAppEngine的 - 我更多地要求确定RabbitMQ和Celery之间的用例.以下是我认为与主题相关的响应,并明确说明了消息队列和任务队列之间的区别.
我问:
是否适当地说"Celery是QueueWrapper/QueueFramework,它消除了必须管理内部队列管理/队列管理活动等的复杂性"?
我理解书中的语言"Celery是一个任务队列"和"RabbitMQ是一个消息代理".然而,作为第一次使用芹菜的用户似乎有点混乱,因为我们总是将RabbitMQ称为"队列".
请帮助解释芹菜与RabbitMQ的对比方式/用途
的响应,我从拿到阿布阿什拉夫Masnun
任务队列和消息队列.RabbitMQ是一个"MQ".它接收消息并传递消息.
芹菜是一个任务队列.它接收任务及其相关数据,运行它们并提供结果.
让我们暂时忘掉芹菜.我们来谈谈RabbitMQ.我们通常会做什么?我们的Django/Flask应用程序会将消息发送到队列.我们将运行一些正在等待某些队列中的新消息的工作程序.当新消息到达时,它开始工作并处理任务.
Celery精美地管理整个过程.我们不再需要学习或担心AMQP或RabbitMQ的细节.我们可以使用Redis甚至数据库(例如MySQL)作为消息代理.Celery允许我们使用我们的工作代码定义"任务".当我们需要在后台(甚至前台)做某事时,我们可以调用此任务(用于即时执行)或安排此任务进行延迟处理.Celery将处理传递和运行任务的消息.它将启动工作人员,他们将知道如何运行您定义的任务并存储结果.因此,您可以在以后查询任务结果,甚至在需要时查询任务进度.
您也可以使用Celery作为cron作业的替代品(尽管我并不喜欢它)!
我从Juan Francisco Calderon Zumba得到的另一个回应
我的理解是芹菜只是一个非常高的抽象层次来实现事件的生产者/消费者.例如,使用rabbitmq,你需要做几件令人痛苦的事情.芹菜本身不是队列.事件队列存储在您选择的系统中,celery帮助您处理此类事件,而无需从头开始编写生产者/消费者.
最后,这是我最后学习的内容:
Celery是一个队列包装器/框架,它消除了必须管理底层AMQP机制/架构的复杂性,这些机制/架构直接与RabbitMQ一起运行
根据上下文可能会有所不同,但以下是我的理解:
消息队列是消息代理部分 - 队列数据结构实现,您可以在其中:
任务队列则是处理任务的:
可以看到,消息队列和任务队列侧重于不同的方面,它们可以重叠,但不一定。
任务队列而不是消息队列的一个示例 - 如果您的任务不关心顺序 - 每个任务不相互依赖 - 那么您不需要“队列”,先进先出的数据结构。你可以,但你不必这样做。您只需要一个地方来存储缓冲任务,例如池、简单的 SQL/NoSQL 数据库甚至 S3 就足够了。
相反的例子是推送通知。您使用消息队列但不一定使用任务队列。服务器生成事件/通知并希望将它们传递给客户端。服务器将在队列中推送通知。当客户端准备好时,客户端会从队列中消耗/拉取通知。GCP PubSub、AWS SNS 等产品可用于此目的。
由于并发控制,任务队列通常比消息队列更复杂,更不用说如果您想要水平扩展(例如跨节点分配工作人员以优化并发)。
像 Celery 这样的工具是任务队列 + 消息队列合二为一的。据我所知,像 Celery 这样的工具并不多,我猜这就是它如此受欢迎的原因(替代方案是 NodeJS 中的 Bull 或 Bee,或者如果您了解更多,请告诉我!)。
我的公司最近必须实现一个任务队列。在谷歌搜索合适的工具时,这两个术语让我很困惑,因为我知道我想要什么,但不知道人们如何称呼它以及我应该搜索什么关键字。
我个人没有太多使用AppEngine,所以无法回答这个问题,但您可以随时检查上述几点,看看它是否满足要求。
GAE的任务队列是允许应用程序进行后台处理的一种方法,它们不会起到与消息队列相同的作用。它们是完全不同的事物,具有不同的功能。
消息队列是一种在进程,线程,系统之间共享信息的机制。
AppEngine任务队列是AppEngine应用程序自言自语的一种方式,我需要这样做,但是稍后将在客户端请求的上下文之外进行操作。
| 归档时间: |
|
| 查看次数: |
6221 次 |
| 最近记录: |