升級至最新版 App Engine 服務 SDK 前,請先參閱遷移總覽。
只要將 App Engine 服務 SDK 更新至最新版本,即可自動遷移至 Cloud Tasks。升級後,SDK 會自動將 PushQueue 呼叫重新導向至 Cloud Tasks 前端 API。Cloud Tasks 會保留現有的工作佇列和工作,因此不需要額外遷移。
在幕後,更新後的 SDK 會使用 Cloud Tasks API,以維持與工作佇列功能的一致性,SDK 支援下列項目:
- 批次建立工作:SDK 使用批次 API,支援在單一呼叫中新增最多 100 項工作。
- 工作層級重試:SDK 支援工作專屬的重試設定。
- 交易工作:SDK 會在 Datastore 交易中將工作排入佇列。如要維持可靠性,請建立或修改
cron.yaml檔案。
定價與配額
將發送佇列遷移至 Cloud Tasks 可能會影響應用程式的價格和配額。
定價
請先查看 Cloud Tasks 定價,再估算遷移前的每月費用。
與 Task Queues 類似,使用 Cloud Tasks 推送目標向 App Engine 應用程式傳送要求是免費的。不過,與工作佇列不同的是,Cloud Tasks 會針對執行的作業收費,例如建立、刪除或管理工作。相較於免費的 App Engine 工作佇列,這可能會導致整體每月費用較高。
配額
Cloud Tasks 要求也會計入 App Engine 要求配額。
與工作佇列相同,Cloud Tasks 也有服務專屬的配額。遷移至 Cloud Tasks 可能會變更配額。
事前準備
下列各節將討論將發送佇列遷移至 Cloud Tasks 前的成本和配額考量。
確認您有權存取 App Engine 原始碼。
啟用 Cloud Tasks 和 Cloud Scheduler API:
為確保 App Engine 服務帳戶具備必要權限,可讓 SDK 將工作分派至 Cloud Tasks API,請要求管理員在專案中授予「Cloud Tasks Enqueuer」(
roles/cloudtasks.enqueuer) 身分與存取權管理角色。
更新 App Engine 服務 SDK
確認應用程式使用最新版的 App Engine 服務 SDK。
在
pom.xml中,將 App Engine 服務 SDK 更新至v5.2.0-beta以上版本。com.google.appengine appengine-api-1.0-sdk v5.2.0-beta 啟用 Cloud Tasks 轉送功能
runtime: java25 service: my-service-b env_variables: APPENGINE_USE_CLOUDTASK_PUSH_QUEUE: "true"將
pom.xml中的 App Engine SDK 依附元件更新至v5.2.0-beta以上版本。如果應用程式使用 XML 設定 (
appengine-web.xml):<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <service>my-java-service-b</service> <runtime>java25</runtime> <env-variables> <env-var name="APPENGINE_USE_CLOUDTASK_PUSH_QUEUE" value="true" /> </env-variables> </appengine-web-app>部署應用程式:
gcloud app deploy在 Cloud Tasks 中驗證發送佇列,確認應用程式使用 Cloud Tasks。
設定交易工作 (選用)
如果應用程式在 Datastore 交易中將工作加入佇列,SDK 會依賴內部 Cron 工作,確保在 Datastore 提交期間無法加入佇列的工作最終會得到處理。
如要處理發送佇列交易工作,請建立或更新 cron.yaml 檔案,定期呼叫內部處理器。例如:
cron:
- description: "Process push queue transactional tasks"
url: /_ah/cloudtask/sweep
schedule: every 30 minutes # Change this based on the usage pattern
在 web.xml 檔案中為 utils.servlet.SweeperServlet 新增網址對應,或為 Java 17/21 Jakarta EE 執行階段新增 utils.servlet.jakarta.SweeperServlet。
<servlet>
<servlet-name>cloudtask_sweep</servlet-name>
<servlet-class>com.google.apphosting.utils.servlet.SweeperServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cloudtask_sweep</servlet-name>
<url-pattern>/_ah/cloudtask/sweep</url-pattern>
</servlet-mapping>