谷歌应用引擎中的Push队列和Pull队列

24

目前为止,没有人(甚至是GAE文档)能够给我一个真正清晰的描述,说明推送队列拉取队列之间有什么区别。

我的理解是,任务队列API允许您定义任务队列,其中可以将工作入队。以某种方式,这与GAE的自动扩展功能配合使用,因此您不需要显式地管理消耗这些队列中的任务的工作线程数量:GAE会为您处理。

但是,我无法找到关于推送队列和拉取队列之间差异的通俗易懂的描述。"推送队列"在推送什么?"拉取队列"在拉取什么?它们都在queues.xml内配置吗?

1个回答

32
拉取队列中,您将任务放入队列中,然后您的代码需要拉取它们。通过从队列中租用并删除任务来拉取它们。如果您不删除任务并且租赁时间已过期,则系统将把任务返回到队列中。

您可以使用拉取队列(例如)来聚合多个工作单元,这些工作单元可以一起处理。另一个例子:在外部机器(如EC2或gCompute)上拉取任务以便以AppEngine无法处理的方式处理任务。

推送队列中,您将任务放入队列中,但AppEngine将取消排队,并在指定任务处理程序的情况下运行它们。您可以控制任务处理速率,如何控制任务执行失败,而AppEngine将决定使用多少实例(线程)来处理任务。


1
哦,谢谢 @Shay Erlichmen (+1) - 所以总结一下: "pull" 队列需要你在代码中手动取消排队和显式处理任务; 而使用 "push" 队列,只需指定一个处理程序和配置,GAE 就会处理其余的事情。这个评估公正吗?另外,几个跟进问题:(1) queues.xml 只适用于 push 队列吗?(2) 我假设 Task Queue API 包含了从 pull 队列显式取消排队/删除任务的代码,是吗?再次感谢! - IAmYourFaja
1
@pnongrata,你的总结是正确的。至于(1),不,你也可以在queues.xml中定义pull队列,最少如果队列不在xml中,则不存在。而且(2)是肯定的,寻找lease_queue(出队)和delete_tasks。 - Shay Erlichmen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接