Memigrasikan push queue ke Cloud Tasks dengan mengupgrade ke SDK terbaru (Java)

Sebelum mengupgrade ke versi SDK layanan App Engine terbaru, tinjau ringkasan migrasi.

Anda dapat bermigrasi ke Cloud Tasks secara otomatis dengan mengupdate SDK layanan App Engine ke versi terbaru. Setelah Anda mengupgrade, SDK akan otomatis mengalihkan panggilan PushQueue ke API frontend Cloud Tasks untuk Anda. Cloud Tasks mempertahankan tugas dan antrean tugas yang ada, sehingga tidak diperlukan migrasi tambahan.

Di balik layar, SDK yang diperbarui menggunakan Cloud Tasks API untuk mempertahankan kesetaraan fitur dengan fitur Task Queue. SDK mendukung hal berikut:

  • Pembuatan tugas batch: SDK menggunakan batch API untuk mendukung penambahan hingga 100 tugas dalam satu panggilan.
  • Percobaan ulang tingkat tugas: SDK mendukung konfigurasi percobaan ulang khusus tugas.
  • Tugas transaksional: SDK mengantrekan tugas dalam transaksi Datastore. Untuk mempertahankan keandalan, buat atau ubah file cron.yaml.

Harga dan kuota

Memigrasikan push queue ke Cloud Tasks dapat memengaruhi harga dan kuota untuk aplikasi Anda.

Harga

Tinjau harga Cloud Tasks untuk memperkirakan biaya bulanan Anda sebelum bermigrasi.

Mirip dengan Task Queue, mengirim permintaan ke aplikasi App Engine Anda dengan target push Cloud Tasks tidak dikenai biaya. Namun, tidak seperti Task Queue, Cloud Tasks mengenakan biaya untuk operasi yang dilakukan, seperti membuat, menghapus, atau mengelola tugas. Hal ini dapat menyebabkan biaya bulanan keseluruhan yang lebih tinggi dibandingkan dengan Task Queue App Engine gratis.

Kuota

Permintaan Cloud Tasks juga dihitung dalam kuota permintaan App Engine Anda.

Seperti Task Queue, Cloud Tasks memiliki kuota khusus layanan. Migrasi ke Cloud Tasks kemungkinan akan mengubah kuota Anda.

Sebelum memulai

Bagian berikut membahas pertimbangan biaya dan kuota sebelum memigrasikan push queue ke Cloud Tasks.

  1. Pastikan Anda memiliki akses ke kode sumber App Engine.

  2. Aktifkan Cloud Tasks dan Cloud Scheduler API:

    Mengaktifkan API

  3. Untuk memastikan akun layanan App Engine memiliki izin yang diperlukan agar SDK dapat mengirim tugas ke Cloud Tasks API, minta administrator untuk memberikan peran IAM Cloud Tasks Enqueuer (roles/cloudtasks.enqueuer) pada project.

Mengupdate SDK layanan App Engine

  1. Pastikan aplikasi Anda menggunakan SDK layanan App Engine versi terbaru.

    Di pom.xml, update SDK layanan App Engine ke versi v5.2.0-beta atau yang lebih baru.

    
        com.google.appengine
        appengine-api-1.0-sdk
        v5.2.0-beta
    
  2. Mengaktifkan perutean Cloud Tasks

    runtime: java25
    service: my-service-b
    
    env_variables:
      APPENGINE_USE_CLOUDTASK_PUSH_QUEUE: "true"
    

    Update dependensi App Engine SDK di pom.xml ke versi v5.2.0-beta atau yang lebih baru.

    Jika aplikasi Anda menggunakan Konfigurasi 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>
    
  3. Deploy aplikasi Anda:

    gcloud app deploy
    
  4. Verifikasi push queue di Cloud Tasks untuk memverifikasi bahwa aplikasi Anda menggunakan Cloud Tasks.

Mengonfigurasi tugas transaksional (opsional)

Jika aplikasi Anda mengantrekan tugas dalam transaksi Datastore, SDK akan mengandalkan cron job internal untuk memastikan bahwa tugas apa pun yang gagal diantrekan selama commit datastore pada akhirnya akan diproses.

Untuk menangani tugas transaksional push queue, buat atau update file cron.yaml untuk memanggil prosesor internal secara berkala. Contoh:

cron:
- description: "Process push queue transactional tasks"
  url: /_ah/cloudtask/sweep
  schedule: every 30 minutes # Change this based on the usage pattern

Tambahkan pemetaan URL di file web.xml untuk utils.servlet.SweeperServlet, atau utils.servlet.jakarta.SweeperServlet untuk runtime Java 17/21 Jakarta EE.

<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>

Langkah berikutnya