2012-04-09 75 views

回答

2

我在Facebook上问了一些开发者社区组的类似问题。这不是专门针对GoogleAppEngine的 - 我在更广泛的意义上要求确定RabbitMQ和Celery之间的用例。以下是我认为与该主题相关的答案,并明确了消息队列和任务队列之间的区别。

我问:

会说,“芹菜是 QueueWrapper/QueueFramework它带走了具有 管理内部queueManagement/queueAdministration活动 等的复杂性”,它是适当的?

我了解“芹菜是一个任务队列”的书籍语言和 “RabbitMQ是消息经纪人”。但是,作为首次使用芹菜的用户,似乎有点困惑 ,因为我们总是知道RabbitMQ为 是'队列'。

请解释如何/在constrast确实与 RabbitMQ的

A response我从阿布阿什拉夫了Masnun

任务队列和消息队列芹菜什么帮助。 RabbitMQ是一个“MQ”。它收到消息 并传递消息。

芹菜是一个任务队列。它接收任务及其相关数据, 运行它们并提供结果。

让我们暂时忘掉芹菜吧。我们来谈谈RabbitMQ。我们通常会做什么 ?我们的Django/Flask应用程序会向 队列发送消息。我们将有一些工作人员在等待新的 消息在某些队列中运行。当新消息到达时,它会启动 工作并处理任务。

芹菜精美地管理着这整个过程。我们不再需要 了解或担心AMQP或RabbitMQ的细节。我们可以使用Redis 甚至数据库(例如MySQL)作为消息代理。芹菜 允许我们用我们的工人代码定义“任务”。当我们需要在后台(甚至前台)中执行 某件事时,我们可以仅调用 此任务(用于即时执行)或安排此任务以延迟 处理。 Celery会处理消息传递并运行 任务。它会启动员工,他们会知道如何运行您定义的任务并存储结果。因此,您可以稍后查询任务 结果或需要时的任务进度。

你也可以使用芹菜作为cron工作的替代品(虽然我不是 真的很喜欢它)!

Another response我从胡安·弗朗西斯科 - 卡尔德隆得到尊巴

我的理解是,芹菜仅仅是一个非常高的水平 抽象实现事件的生产者/消费者。 需要做几件痛苦的事情,例如 rabbitmq。芹菜本身不是队列。事件队列在你选择的系统中被存储 ,芹菜可以帮助你处理这样的事件,而不必从头开始编写生产者/消费者。

最终,这里是我带回家作为我的最后学习:

芹菜是队列包装/框架,它带走了具有 复杂性管理的基本AMQP机制/架构,来 直接操作RabbitMQ

3

GAE的任务队列是一种允许应用程序进行后台处理的手段,它们不会与Message Queue具有相同的功能。它们是完全不同的功能,它们是完全不同的。

消息队列是一种在进程,线程和系统之间共享信息的机制。

AppEngine任务队列是AppEngine应用程序对自己说的一种方式,我需要这样做,但我会稍后在客户端请求的上下文之外执行此操作。

+3

在App Engine上的消息队列和拉取队列之间没有功能差异(我知道)。 – 2012-04-10 05:09:54

相关问题