本页面简要介绍了 App Engine 标准环境中的拉取队列。
push在推送队列中,系统会根据队列的配置将任务传送到工作器服务。在拉取队列中,工作器服务必须向队列请求任务。队列会做出响应,向该工作器授予在指定的时间段内处理任务的唯一访问权限,这称为“租用”。
使用拉取队列,您还可以使用标记对相关任务进行分组,然后将工作器配置为一次性提取多个带有特定标记的任务。此过程称为“批处理”。
如果工作器在租用到期时未能处理某个任务,则可以进行续租或者让任务租用自动到期,此时其他工作器便可以租用该任务。完成与任务相关的工作后,工作器必须删除该任务。
如果使用拉取队列,则会要求您的代码处理一些在推送队列中自动执行的功能:
- 增减工作器
- 您的代码需要根据处理量来扩缩工作器的数量。如果您的代码无法实现扩缩,则在没有任务需要处理时,您可能会浪费计算资源;而如果有太多任务需要处理,您又可能会面临延迟风险。
- 删除任务
- 您的代码还需要在处理任务后明确删除任务。在推送队列中,App Engine 会为您删除任务。如果您的工作器在处理拉取队列任务后未删除相应任务,则另一个工作器将再次处理该任务。这会浪费计算资源;并且如果任务不具有幂等性,还会有出错的风险。
App Engine 标准环境中的拉取队列通过在名为
的配置文件中设置属性来创建。queue.yaml
拉取队列工作流
从拉取队列处理任务的工作器,必须在运行于 App Engine 标准环境中的服务内加以定义。
工作流如下:
- 使用
创建拉取队列。queue.yaml
- 创建任务并将其添加到队列中。
- 您创建的工作器使用 TaskQueue 租用任务。
- App Engine 在租用响应中将任务数据发送给工作器。
- 工作器处理该任务。如果该任务在租用到期之前未能执行,则工作器可以修改租用时长。如果租用到期,则其他工作器将可以租用该任务。
- 成功处理任务后,工作器删除任务。
后续步骤
- 了解如何创建拉取队列。