Java 谷歌应用引擎上的推拉队列

Java 谷歌应用引擎上的推拉队列,java,api,google-app-engine,task-queue,worker-thread,Java,Api,Google App Engine,Task Queue,Worker Thread,到目前为止,没有人(甚至GAE文档)能够真正清楚地描述推式队列和拉式队列之间的区别 我的理解是,任务队列API允许您定义任务队列,在这些队列中可以将工作排入队列。不知何故,这与GAE的自动伸缩功能配合使用,因此您不需要显式管理从这些队列中消耗任务的工作线程的数量:GAE只为您做这件事 但我在任何地方都找不到“国王英语”对推拉式队列之间区别的描述。什么是“推送队列”推送?什么是“拉动队列”拉动?它们都是在队列.xml中配置的吗?在拉入队列中您将任务排入队列,代码需要拉入队列,您可以通过从队列中租用

到目前为止,没有人(甚至GAE文档)能够真正清楚地描述推式队列和拉式队列之间的区别

我的理解是,任务队列API允许您定义任务队列,在这些队列中可以将工作排入队列。不知何故,这与GAE的自动伸缩功能配合使用,因此您不需要显式管理从这些队列中消耗任务的工作线程的数量:GAE只为您做这件事


但我在任何地方都找不到“国王英语”对推拉式队列之间区别的描述。什么是“推送队列”推送?什么是“拉动队列”拉动?它们都是在
队列.xml
中配置的吗?

拉入队列中您将任务排入队列,代码需要拉入队列,您可以通过从队列中租用任务并删除任务来拉入任务。如果您不删除任务,并且租用时间已过期,系统将把任务返回队列

您可以使用拉队列(例如)来聚合可以一起处理的多个工作单元。另一个例子:将由外部机器(如EC2或gCompute)拉入的任务排队,以便以AppEngine无法实现的方式处理该任务


推送队列中将任务排入队列,但AppEngine会将它们出列,并在任务指定的处理程序上运行它们。您可以控制任务处理速度,如何控制任务执行失败,AppEngine将决定使用多少实例(线程)来进行处理

啊,谢谢@Shay Erlichmen(+1)-总结一下:“拉”队列要求您在代码中显式地手动出列和处理任务;而对于“推送”队列,您只需指定一个处理程序和一个配置,其余部分由GAE处理。这是一个公平的评估吗?此外,还有以下几点:(1)
queues.xml是否仅适用于推送队列?(2) 我假设任务队列API包含用于显式地从拉队列中退出/删除任务的代码,是吗?再次感谢@pnongrata您的总结是正确的,至于(1)否,您还可以在queues.xml中定义pull queues,如果队列不在xml中,那么至少它不存在。(2)是的,查找租约队列(出列)和删除任务。