Memigrasikan push queue ke Cloud Tasks (Python)

Halaman ini menjelaskan cara memigrasikan kode push queue dari Task Queue ke Cloud Tasks. Cloud Tasks kini merupakan cara yang direkomendasikan untuk menangani push queue App Engine.

Dengan Cloud Tasks, Anda mengakses layanan yang sama dengan yang Anda akses menggunakan Task Queues RPC API. Artinya, Anda tidak perlu membuat ulang push queue dan tugas push yang sudah ada. Namun, Anda harus memigrasikan kode yang membuat atau berinteraksi dengan push queue atau tugas push untuk menggunakan Cloud Tasks API.

Anda dapat membuat dan berinteraksi dengan push queue dan tugas push menggunakan API RPC dan REST Cloud Tasks, library klien Cloud Tasks, Google Cloud CLI, dan Konsol Google Cloud. Halaman ini menyediakan contoh menggunakan gcloud CLI dan library klien Cloud Tasks.

Di Cloud Tasks, semua antrean beroperasi sebagai push queue. Di bagian lain panduan ini dan dalam dokumentasi Cloud Tasks, istilah antrean setara dengan istilah push queue. Demikian pula, istilah tugas setara dengan istilah tugas push.

Fitur yang tidak tersedia di Cloud Tasks

Fitur berikut tidak tersedia di Cloud Tasks:

  • Mengantrekan tugas dalam transaksi Datastore
  • Menggunakan library tugas yang ditangguhkan, sebagai ganti layanan worker
  • Mengerjakan tugas di aplikasi multi-tenant
  • Menyimulasikan dengan server pengembangan lokal
  • Menambahkan tugas secara asinkron

Harga dan kuota

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

Harga

Cloud Tasks memiliki harga sendiri. Seperti halnya Task Queue, mengirim permintaan ke aplikasi App Engine dengan sebuah tugas dapat menyebabkan aplikasi dikenai biaya.

Kuota

Kuota Cloud Tasks berbeda dengan kuota untuk Task Queue. Seperti halnya Task Queue, mengirim permintaan ke aplikasi App Engine Anda dari Cloud Tasks dapat memengaruhi kuota permintaan App Engine Anda.

Sebelum memigrasikan

Jika Anda belum melakukannya, siapkan lingkungan pengembangan Python Anda untuk menggunakan versi Python yang kompatibel dengan Google Cloud, dan instal alat pengujian untuk membuat lingkungan Python yang terisolasi.

Bagian berikut membahas langkah-langkah penyiapan sebelum memigrasikan push queue ke Cloud Tasks.

Memigrasikan pull queue

Sebelum memulai, migrasikan pull queue sebelum mengikuti petunjuk dalam panduan ini untuk memigrasikan push queue. Memigrasikan pull queue setelah memigrasikan push queue tidak direkomendasikan karena penggunaan file queue.yaml yang diperlukan cenderung menyebabkan perilaku yang tidak terduga dengan Cloud Tasks.

Melindungi konfigurasi antrean

Setelah Anda memulai proses migrasi ke Cloud Tasks, mengubah file queue.yaml dapat menyebabkan perilaku yang tidak terduga dan tidak direkomendasikan. Lindungi konfigurasi antrean Anda dari modifikasi oleh file queue.yaml dengan langkah-langkah berikut.

  1. Konfigurasi gcloud CLI untuk menghapus file queue.yaml pada deployment mendatang.

    Tambahkan file queue.yaml Anda ke file .gcloudignore. Untuk memeriksa apakah Anda sudah memiliki file .gcloudignore, Anda dapat menjalankan perintah berikut di terminal Anda dari direktori level teratas aplikasi Anda. Perintah ini akan menghasilkan nama file jika file tersebut ada.

    ls -a | grep .gcloudignore

    Untuk mempelajari lebih lanjut file .gcloudignore, baca referensi .gcloudignore.

  2. Batasi izin pada file queue.yaml Anda.

    Ikuti praktik terbaik yang dijelaskan dalam panduan kami tentang mengamankan konfigurasi antrean.

  3. Pelajari Cloud Tasks dan file queue.yaml (opsional).

    Saat menggunakan Cloud Tasks API untuk mengelola konfigurasi antrean Anda, men-deploy file queue.yaml akan menggantikan konfigurasi yang ditetapkan oleh Cloud Tasks, yang dapat menyebabkan perilaku tidak terduga. Baca Menggunakan pengelolaan antrean versus queue.yaml untuk mempelajari lebih lanjut.

Mengaktifkan Cloud Tasks API

Untuk mengaktifkan Cloud Tasks API, klik Enable di Cloud Tasks API di Library API. Jika melihat tombol Manage, bukan tombol Enable, berarti Anda sebelumnya telah mengaktifkan Cloud Tasks API untuk project Anda dan tidak perlu melakukannya lagi.

Mengautentikasi aplikasi ke Cloud Tasks API

Anda harus mengautentikasi aplikasi ke Cloud Tasks API. Bagian ini membahas autentikasi untuk dua kasus penggunaan yang berbeda.

Untuk mengembangkan atau menguji aplikasi secara lokal, sebaiknya gunakan akun layanan. Untuk petunjuk tentang cara menyiapkan akun layanan dan menghubungkannya ke aplikasi Anda, baca Mendapatkan dan memberikan kredensial akun layanan secara manual.

Untuk men-deploy aplikasi di App Engine, Anda tidak perlu memberikan autentikasi baru. Kredensial Default Aplikasi (ADC) menyimpulkan detail autentikasi untuk aplikasi App Engine.

Mendownload gcloud CLI

Download dan instal gcloud CLI untuk menggunakan gcloud CLI dengan Cloud Tasks API jika Anda belum pernah menginstalnya. Jalankan perintah berikut dari terminal jika Anda sudah menginstal gcloud CLI.

gcloud components update

Mengimpor Library Klien Cloud

Untuk menggunakan library klien Cloud Tasks dengan aplikasi App Engine Anda:

  1. Perbarui file app.yaml. Ikuti petunjuk untuk versi Python Anda:

    Python 2

    Untuk aplikasi Python 2, tambahkan versi terbaru library grpcio dan setuptools.

    Berikut adalah contoh file app.yaml:

    runtime: python27
    threadsafe: yes
    api_version: 1
    
    libraries:
    - name: grpcio
      version: latest
    - name: setuptools
      version: latest
    

    Python 3

    Untuk aplikasi Python 3, tentukan elemen runtime di file app.yaml dengan versi Python 3 yang didukung. Contoh:

    runtime: python310 # or another support version
    

    Runtime Python 3 menginstal library secara otomatis, sehingga Anda tidak perlu menentukan library bawaan dari runtime Python 2 sebelumnya. Jika aplikasi Python 3 Anda menggunakan layanan paket lama lainnya saat bermigrasi, Anda dapat terus menentukan library bawaan yang diperlukan. Jika tidak, Anda dapat menghapus baris yang tidak diperlukan dalam file app.yaml.

  2. Perbarui file requirements.txt. Ikuti petunjuk untuk versi python Anda:

    Python 2

    Tambahkan Library Klien Cloud untuk Cloud Tasks ke daftar dependensi Anda dalam file requirements.txt.

    google-cloud-tasks
    

    Lalu, jalankan pip install -t lib -r requirements.txt untuk memperbarui daftar library yang tersedia untuk aplikasi Anda.

    Python 3

    Tambahkan Library Klien Cloud untuk Cloud Tasks ke daftar dependensi Anda dalam file requirements.txt.

    google-cloud-tasks
    

    App Engine otomatis menginstal dependensi ini selama deployment aplikasi di runtime Python 3, jadi hapus folder lib jika ada.

  3. Untuk aplikasi Python 2, jika aplikasi menggunakan library bawaan atau yang disalin, Anda harus menentukan jalur tersebut dalam file appengine_config.py, yang terletak di folder yang sama dengan file app.yaml Anda:

    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set PATH to your libraries folder.
    PATH = 'lib'
    # Add libraries installed in the PATH folder.
    vendor.add(PATH)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(PATH)
    

    File appengine_config.py mengasumsikan bahwa direktori kerja saat ini adalah tempat folder lib berada. Dalam beberapa kasus, seperti pengujian unit, direktori kerja saat ini dapat berbeda. Untuk menghindari error, Anda dapat secara eksplisit meneruskan jalur lengkap ke folder lib menggunakan:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  4. Impor library klien Cloud Tasks di file apa pun yang menggunakan push queue dari Task Queues API:

    from google.cloud import tasks

    Setelah berhasil menyelesaikan migrasi penuh atas semua kode yang membuat atau berinteraksi dengan push queue ke Cloud Tasks, hapus pernyataan yang mengimpor Task Queues API; misalnya, from google.appengine.api import taskqueue.

Membuat dan mengelola antrean

Bagian ini menjelaskan cara membuat dan mengelola antrean menggunakan Cloud Tasks API.

Dengan Cloud Tasks, Anda tidak menggunakan file queue.yaml untuk membuat atau mengelola antrean. Sebagai gantinya, Anda menggunakan Cloud Tasks API. Menggunakan file queue.yaml dan Cloud Tasks API tidak direkomendasikan, tetapi ini mungkin menjadi bagian yang tak terhindarkan dalam proses migrasi dari Task Queue ke Cloud Tasks, yang bergantung pada aplikasi Anda. Baca Menggunakan pengelolaan Antrean versus queue.yaml untuk mempelajari praktik terbaik.

Membuat antrean

Baca bagian ini jika aplikasi Anda membuat antrean secara terprogram, atau jika Anda ingin membuat antrean tambahan dari command line.

Di Cloud Tasks, nama antrean memiliki format projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID. Bagian LOCATION_ID pada nama antrean sesuai dengan region Google Cloud. Bagian QUEUE_ID dalam nama antrean setara dengan kolom name antrean Task Queue. Nama antrean dibuat selama pembuatan antrean berdasarkan project, region, dan QUEUE_ID yang Anda tentukan.

Secara umum, lokasi antrean (yaitu region) harus sama dengan region aplikasi Anda. Dua pengecualian untuk aturan ini adalah untuk aplikasi yang menggunakan region europe-west dan aplikasi yang menggunakan region us-central. Di Cloud Tasks, region ini masing-masing disebut europe-west1 dan us-central1.

Anda dapat menentukan konfigurasi antrean opsional selama pembuatan antrean, tetapi Anda juga dapat melakukannya dengan memperbarui antrean setelah dibuat.

Anda tidak perlu membuat ulang antrean yang ada. Sebagai gantinya, migrasikan kode yang berinteraksi dengan antrean yang ada dengan membaca bagian yang relevan dalam panduan ini.

Menggunakan kembali nama antrean

Anda harus menunggu 7 hari setelah menghapus antrean untuk membuat antrean dengan ID antrean yang sama di project dan lokasi yang sama (yaitu region).

Contoh berikut membuat dua antrean menggunakan Cloud Tasks. Antrean pertama memiliki ID antrean queue-blue, dan dikonfigurasi untuk mengirim semua tugas ke versi v2 layanan task-module dengan kecepatan 5/s. Antrean kedua memiliki ID antrean queue-red dan mengirim tugas dengan kecepatan 1/s. Keduanya dibuat pada project dengan project ID my-project-id di lokasi us-central1. Ini adalah Cloud Tasks yang setara dengan membuat antrean di Task Queues.

gcloud

gcloud CLI menyimpulkan project dan lokasi dari konfigurasi gcloud CLI.

gcloud tasks queues create queue-blue \
--max-dispatches-per-second=5 \
--routing-override=service:task-module,version:v2
gcloud tasks queues create queue-red \
--max-dispatches-per-second=1

library klien

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue_blue_name = 'queue-blue'
# queue_red_name = 'queue-red'

parent = f"projects/{project}/locations/{location}"

queue_blue = {
    "name": client.queue_path(project, location, queue_blue_name),
    "rate_limits": {"max_dispatches_per_second": 5},
    "app_engine_routing_override": {"version": "v2", "service": "task-module"},
}

queue_red = {
    "name": client.queue_path(project, location, queue_red_name),
    "rate_limits": {"max_dispatches_per_second": 1},
}

queues = [queue_blue, queue_red]
for queue in queues:
    response = client.create_queue(parent=parent, queue=queue)
    print(response)

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Membuat antrean Cloud Tasks.

Menetapkan kecepatan pemrosesan antrean

Tabel berikut mencantumkan kolom yang berbeda dari Task Queue dengan Cloud Tasks.

Kolom Task Queue Kolom Cloud Tasks Deskripsi
rate max_dispatches_per_second Kecepatan maksimum saat tugas dikirim dari antrean
max_concurrent_requests max_concurrent_dispatches Jumlah maksimum tugas serentak yang dapat dikirim dari antrean
bucket_size max_burst_size

Cloud Tasks menghitung properti get-only max_burst_size yang membatasi seberapa cepat tugas dalam antrean diproses berdasarkan nilai max_dispatches_per_second. Kolom ini memungkinkan antrean memiliki kecepatan tinggi sehingga pemrosesan dimulai sesaat setelah tugas diantrekan, tetapi tetap membatasi penggunaan resource saat banyak tugas diantrekan dalam waktu singkat.

Untuk antrean App Engine yang dibuat atau diperbarui menggunakan file queue.yaml, max_burst_size pada awalnya sama dengan bucket_size. Namun, jika antrean selanjutnya diteruskan ke perintah update menggunakan antarmuka Cloud Tasks apa pun, max_burst_size akan direset berdasarkan nilai max_dispatches_per_second, terlepas dari apakah max_dispatches_per_second sudah diupdate.

total_storage_limit Tidak digunakan lagi di Cloud Tasks Cloud Tasks tidak mendukung penetapan batas penyimpanan kustom

Anda dapat menetapkan kecepatan pemrosesan antrean saat membuat antrean atau memperbaruinya setelah itu. Contoh berikut menggunakan Cloud Tasks untuk menetapkan kecepatan pemrosesan pada antrean bernama queue-blue yang telah dibuat. Jika queue-blue dibuat atau dikonfigurasi menggunakan file queue.yaml, contoh berikut akan mereset max_burst_size berdasarkan nilai max_dispatches_per_second dari 20. Ini adalah Cloud Tasks yang setara dengan menetapkan kecepatan pemrosesan antrean di Task Queue.

gcloud

gcloud tasks queues update queue-blue \
--max-dispatches-per-second=20 \
--max-concurrent-dispatches=10

library klien

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue-blue'

# Get queue object
queue_path = client.queue_path(project, location, queue)
queue = client.get_queue(name=queue_path)

# Update queue object
queue.rate_limits.max_dispatches_per_second = 20
queue.rate_limits.max_concurrent_dispatches = 10

response = client.update_queue(queue=queue)
print(response)

Untuk mempelajari lebih lanjut, lihat Menentukan pembatasan kapasitas.

Menonaktifkan dan melanjutkan antrean

Cloud Tasks menggunakan istilah jeda dengan cara yang sama seperti Task Queue menggunakan istilah nonaktifkan. Menjeda antrean akan menghentikan tugas dalam antrean agar tidak dijalankan hingga antrean dilanjutkan. Namun, Anda dapat terus menambahkan tugas ke antrean yang dijeda. Cloud Tasks menggunakan istilah lanjutkan dengan cara yang sama dengan Task Queue.

Contoh berikut menjeda antrean dengan ID antrean queue1 . Ini adalah Cloud Tasks yang setara dengan menonaktifkan antrean di Task Queue.

gcloud

gcloud tasks queues pause 

queue1

library klien

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

queue_path = client.queue_path(project, location, queue)
response = client.pause_queue(name=queue_path)

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menjeda antrean.

Menghapus antrean

Setelah menghapus antrean, Anda harus menunggu 7 hari sebelum membuat antrean dengan nama yang sama. Sebaiknya hapus permanen semua tugas dari antrean dan konfigurasi ulang antrean jika Anda tidak dapat menunggu selama 7 hari.

Contoh berikut menghapus antrean dengan ID antrean queue1 . Ini adalah Cloud Tasks yang setara dengan menghapus antrean di Task Queue.

gcloud

gcloud tasks queues delete 

queue1

library klien

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

queue_path = client.queue_path(project, location, queue)
response = client.delete_queue(name=queue_path)

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menghapus antrean.

Membuat dan mengelola tugas

Bagian ini menjelaskan cara membuat dan mengelola tugas menggunakan Cloud Tasks API.

Membuat tugas

Tabel berikut mencantumkan kolom yang berbeda dari Task Queue dengan Cloud Tasks.

Kolom Task Queue Kolom Cloud Tasks Deskripsi
BARU di Cloud Tasks app_engine_http_request Membuat permintaan yang menarget layanan App Engine. Tugas ini disebut sebagai tugas App Engine.
method http_method Menentukan metode permintaan; misalnya, POST
url relative_uri Menentukan pengendali tugas. Perhatikan perbedaan pada huruf terakhir: i untuk uniform resource identifier, dibandingkan l untuk uniform resource locator
target app_engine_routing Opsional. Menentukan App Engine service, version, dan instance untuk tugas App Engine. Jika tidak disetel, layanan, versi , dan instance default akan digunakan.

Contoh berikut membuat tugas yang dirutekan ke layanan App Engine bernama worker dengan pengendali /update_counter. Ini adalah Cloud Tasks yang setara dengan membuat tugas di Task Queue.

gcloud

gcloud tasks create-app-engine-task --queue=default \
--method=POST --relative-uri=/update_counter --routing=service:worker \
--body-content=10

library klien

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'default'
amount = 10

parent = client.queue_path(project, location, queue)

task = {
    "app_engine_http_request": {
        "http_method": tasks.HttpMethod.POST,
        "relative_uri": "/update_counter",
        "app_engine_routing": {"service": "worker"},
        "body": str(amount).encode(),
    }
}

response = client.create_task(parent=parent, task=task)
eta = response.schedule_time.strftime("%m/%d/%Y, %H:%M:%S")
print(f"Task {response.name} enqueued, ETA {eta}.")

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Membuat tugas App Engine.

Menentukan layanan dan perutean target

Penentuan layanan, versi, dan instance target App Engine untuk tugas App Engine bersifat opsional. Secara default, tugas App Engine dirutekan ke layanan, versi, dan instance yang merupakan default pada saat tugas dicoba.

Tetapkan properti app_engine_routing tugas selama pembuatan tugas untuk menentukan layanan, versi, atau instance App Engine yang berbeda untuk tugas Anda.

Untuk merutekan semua tugas pada antrean tertentu ke layanan, versi, dan instance App Engine yang sama, Anda dapat menetapkan properti app_engine_routing_override pada antrean.

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Mengonfigurasi pemilihan rute.

Meneruskan data ke pengendali

Seperti Task Queue, Anda dapat meneruskan data ke pengendali dalam dua cara menggunakan Cloud Tasks. Anda dapat meneruskan data sebagai parameter kueri di URI relatif, atau meneruskan data dalam isi permintaan menggunakan metode HTTP POST atau PUT.

Cloud Tasks menggunakan istilah body dengan cara yang sama seperti Task Queue menggunakan istilah payload. Di Cloud Tasks, jenis konten isi default adalah aliran octet, bukan teks biasa. Anda dapat menetapkan jenis konten isi dengan menentukannya di header.

Contoh berikut meneruskan kunci ke pengendali /update_counter dengan dua cara berbeda. Ini adalah Cloud Tasks yang setara dengan meneruskan data ke pengendali di Task Queue.

console

gcloud tasks create-app-engine-task --queue=default --method=GET  \
--relative-uri=

/update_counter

?key=blue --routing=service:worker
gcloud tasks create-app-engine-task --queue=default --method=POST \
--relative-uri=

/update_counter

 --routing=service:worker \
--body-content="{'key': 'blue'}"

library klien

import json

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'default'

parent = client.queue_path(project, location, queue)

task1 = {
    "app_engine_http_request": {
        "http_method": tasks.HttpMethod.POST,
        "relative_uri": "/update_counter?key=blue",
        "app_engine_routing": {"service": "worker"},
    }
}

task2 = {
    "app_engine_http_request": {
        "http_method": tasks.HttpMethod.POST,
        "relative_uri": "/update_counter",
        "app_engine_routing": {"service": "worker"},
        "headers": {"Content-Type": "application/json"},
        "body": json.dumps({"key": "blue"}).encode(),
    }
}

response = client.create_task(parent=parent, task=task1)
print(response)
response = client.create_task(parent=parent, task=task2)
print(response)

Memberi nama tugas

Menentukan nama tugas bersifat opsional. Jika Anda tidak menentukan nama tugas, Cloud Tasks akan membuatnya untuk Anda dengan membuat ID tugas serta menyimpulkan project dan lokasi (yaitu region) berdasarkan antrean yang Anda tentukan selama pembuatan tugas.

Nama tugas memiliki format projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/TASK_ID. Bagian TASK_ID dari nama tugas setara dengan kolom name tugas Task Queue.

Menggunakan kembali nama tugas

Anda harus menunggu sebelum menggunakan kembali nama tugas. Jumlah waktu yang harus Anda tunggu sebelum melakukannya berbeda-beda bergantung pada apakah antrean pengiriman tugas dibuat di Cloud Tasks atau Task Queue.

Untuk tugas pada antrean yang dibuat menggunakan Task Queue (termasuk antrean default), Anda harus menunggu sekitar 9 hari setelah tugas asli dihapus atau dieksekusi. Untuk tugas pada antrean yang dibuat menggunakan Cloud Tasks, Anda harus menunggu sekitar 1 jam setelah tugas asli dihapus atau dieksekusi.

Contoh berikut membuat tugas dengan TASK_ID yang ditetapkan ke first-try, dan menambahkannya ke antrean default. Ini adalah Cloud Tasks yang setara dengan memberi nama tugas di Task Queue.

gcloud

gcloud CLI membuat nama tugas dengan menyimpulkan project dan lokasi dari konfigurasi Anda.

gcloud tasks create-app-engine-task first-try --queue=default \
--method=GET --relative-uri=

/url/path

library klien

Dengan library klien, Anda harus menentukan nama lengkap tugas jika ingin menentukan TASK_ID. Project dan lokasi harus cocok dengan project dan lokasi antrean tempat tugas ditambahkan.

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'default'
# task_name = 'first-try'

parent = client.queue_path(project, location, queue)

task = {
    "name": client.task_path(project, location, queue, task_name),
    "app_engine_http_request": {
        "http_method": tasks.HttpMethod.GET,
        "relative_uri": "/url/path",
    },
}
response = client.create_task(parent=parent, task=task)
print(response)

Mencoba lagi tugas yang gagal

Anda dapat menetapkan konfigurasi percobaan ulang tugas pada antrean selama pembuatan antrean, atau dengan memperbarui antrean. Tabel berikut mencantumkan kolom Task Queue dan kolom Cloud Tasks yang sesuai.

Kolom Task Queue Kolom Cloud Tasks
task_retry_limit max_attempts
task_age_limit max_retry_duration
min_backoff_seconds min_backoff
max_backoff_seconds max_backoff
max_doublings max_doublings

Parameter percobaan ulang khusus tugas

Parameter percobaan ulang khusus tugas yang dikonfigurasi di Task Queue berfungsi di Cloud Tasks, tetapi Anda tidak dapat mengeditnya atau menetapkannya pada tugas baru. Guna mengubah parameter percobaan ulang untuk tugas yang memiliki parameter percobaan ulang khusus tugas, buat ulang tugas dengan antrean Cloud Tasks yang memiliki parameter percobaan ulang yang diinginkan.

Contoh berikut menunjukkan berbagai skenario percobaan ulang:

  • Dalam fooqueue, tugas dicoba ulang hingga tujuh kali dan hingga dua hari sejak upaya eksekusi pertama. Setelah kedua batas terlampaui, kedua batas tersebut akan gagal secara permanen.
  • Dalam barqueue, App Engine akan berupaya mencoba ulang tugas, dengan meningkatkan interval secara linear antara setiap percobaan ulang hingga mencapai backoff maksimum dan mencoba lagi tanpa batas waktu pada interval maksimum (sehingga interval antarpermintaan adalah 10 dtk, 20 dtk, 30 dtk, ..., 190 dtk, 200 dtk, 200 dtk, ...).
  • Dalam bazqueue, interval percobaan ulang dimulai pada 10 detik, lalu dua kali lipat tiga kali, lalu meningkat secara linear, dan akhirnya mencoba lagi tanpa batas waktu pada interval maksimum (sehingga interval antarpermintaan adalah 10 dtk, 20 dtk, 40 dtk, 80 dtk, 160 dtk, 240 dtk, 300 dtk, 300 dtk, ...).

Ini adalah Cloud Tasks yang setara dengan mencoba ulang tugas di Task Queue.

gcloud

Saat menyetel opsi yang menentukan jumlah detik, Anda harus menyertakan s setelah angka bilangan bulat (misalnya 200s, bukan 200).

gcloud tasks queues create fooqueue \
--max-attempts=7 \
--max-retry-duration=172800s  #2*60*60*24 seconds in 2 days
gcloud tasks queues create barqueue \
--min-backoff=10s \
--max-backoff=200s \
--max-doublings=0
gcloud tasks queues create bazqueue \
--min-backoff=10s \
--max-backoff=300s \
--max-doublings=3

library klien

from google.protobuf import duration_pb2

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# fooqueue = 'fooqueue'
# barqueue = 'barqueue'
# bazqueue = 'bazqueue'

parent = f"projects/{project}/locations/{location}"

max_retry = duration_pb2.Duration()
max_retry.seconds = 2 * 60 * 60 * 24

foo = {
    "name": client.queue_path(project, location, fooqueue),
    "rate_limits": {"max_dispatches_per_second": 1},
    "retry_config": {"max_attempts": 7, "max_retry_duration": max_retry},
}

min = duration_pb2.Duration()
min.seconds = 10

max = duration_pb2.Duration()
max.seconds = 200

bar = {
    "name": client.queue_path(project, location, barqueue),
    "rate_limits": {"max_dispatches_per_second": 1},
    "retry_config": {"min_backoff": min, "max_backoff": max, "max_doublings": 0},
}

max.seconds = 300
baz = {
    "name": client.queue_path(project, location, bazqueue),
    "rate_limits": {"max_dispatches_per_second": 1},
    "retry_config": {"min_backoff": min, "max_backoff": max, "max_doublings": 3},
}

queues = [foo, bar, baz]
for queue in queues:
    response = client.create_queue(parent=parent, queue=queue)
    print(response)

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menetapkan parameter percobaan ulang.

Menghapus tugas dari antrean

Saat menghapus tugas, Anda harus menunggu 9 hari sebelum membuat tugas dengan nama yang sama jika tugas berada di antrean yang dibuat menggunakan file queue.yaml, atau 1 jam jika tugas berada di antrean yang dibuat menggunakan Cloud Tasks.

Contoh berikut menghapus tugas dengan ID tugas foo dari antrean dengan ID antrean queue1. Ini adalah Cloud Tasks yang setara dengan menghapus tugas di Task Queue.

gcloud

Project tugas dan lokasi disimpulkan dari project default gcloud CLI.

gcloud tasks delete foo --queue=queue1

library klien

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

task_path = client.task_path(project, location, queue, "foo")
response = client.delete_task(name=task_path)

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menghapus tugas dari antrean.

Menghapus permanen tugas

Contoh berikut menghapus permanen semua tugas dari antrean dengan ID antrean queue1 . Ini adalah Cloud Tasks yang setara dengan menghapus permanen tugas di Task Queue.

gcloud

Project antrean dan lokasi disimpulkan dari project default gcloud CLI.

gcloud tasks queues purge 

queue1

library klien

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

queue_path = client.queue_path(project, location, queue)
response = client.purge_queue(name=queue_path)

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menghapus permanen semua tugas dari antrean.

Langkah berikutnya