您可以通过 App Engine Task Queue API 进行迁移访问同一服务,或者使用 App Engine 标准环境的队列服务(任务队列),或者使用 Cloud Tasks(一个新的 RPC/REST API)。Cloud Tasks 可以部署在第一代 App Engine 运行时之外,具体来讲,是通过所有 App Engine 柔性环境以及第二代 App Engine 标准环境运行时来部署。
Cloud Tasks 和当前的 App Engine 标准环境任务队列服务共存于同一个空间。您可以通过任一 API 添加到相同的队列中。不论您是使用 App Engine SDK 还是新的 Cloud Tasks API,应用内的队列都会将任务转发到处理程序网址以进行异步处理。
新功能
Cloud Tasks 提供了一些无法通过 App Engine SDK 获得的功能,其中包括:
通过 API 进行队列管理:
您可以使用 API,通过 Console 或通过
gcloud
命令进行创建、删除、暂停或者执行其他队列管理任务。列出队列命令:
您可以列出在项目中设置的所有队列。
列出任务命令:
您可以列出任何队列中的所有任务。
Identity and Access Management (IAM) 集成:
您可以使用 IAM 以非常精细的方式保护对队列和任务的访问。
HTTP 目标
您可以在任何具有公共 IP 地址的 HTTP 端点定位处理程序。
Cloud Tasks API 未提供的任务队列功能
拉取队列:
您可以使用 Cloud Pub/Sub(一款 GA 产品)实现许多和拉取队列一样的用例。
-
Cloud Tasks 并不支持将任务作为 Cloud Datastore 事务的一部分加入队列,以便只有在成功提交事务时才会将任务加入队列,并且在这种情况下保证任务入队。
-
在某些情况下,您可能需要异步处理一系列各种各样的小任务,但是为此单独设置多个独立处理程序又太过麻烦,此时可考虑使用 App Engine SDK,它使您可以使用特定于运行时的库创建可管理这些任务的简单函数。目前,Cloud Tasks 中没有此功能。但请注意,未来可以使用 Cloud Tasks 安排一般任务。
命名空间:
有些使用 App Engine SDK 的运行时具有可通过命名空间支持任务多租户的 API。目前,Cloud Tasks 中没有此功能。
-
gcloud CLI 或 App Engine SDK 提供的本地开发服务器不支持 Cloud Tasks API 调用的模拟端点。
-
App Engine SDK 的用户可以选择将任务异步添加到队列中。 目前,Cloud Tasks 中没有此功能。
了解详情
如需详细了解如何迁移代码,请参阅 App Engine 任务队列文档集:
- 从 Python 2.7 拉取队列迁移到发布/订阅
- 从 Python 2.7 推送队列迁移到 Cloud Tasks
- 从 Java 8 拉取队列迁移到 Pub/Sub
- 从 Java 8 推送队列迁移到 Cloud Tasks