Membuat Tugas

Halaman ini menjelaskan cara membuat tugas dan menempatkannya dalam push queue. Saat ingin memproses tugas, Anda harus membuat objek tugas baru dan meletakkannya di antrean. Anda dapat secara eksplisit menetapkan layanan dan pengendali yang memproses tugas, dan meneruskan data khusus tugas ke pengendali secara opsional. Anda juga dapat menyesuaikan konfigurasi untuk tugas, seperti menjadwalkan waktu pada masa mendatang saat tugas harus dijalankan atau membatasi frekuensi percobaan ulang tugas yang diinginkan jika gagal.

Membuat tugas baru

Untuk membuat dan mengantrekan tugas, buat objek PushTask dan panggil metode add(). Anda dapat menambahkan ke antrean yang ditentukan di queue.yaml dengan memberikan argumen nama antrean pada add(). Atau, pemanggilan add() tanpa argumen akan menambahkan tugas ke antrean default.

Anda juga dapat menambahkan tugas secara massal ke antrean menggunakan PushQueue. Dalam contoh berikut, dua objek PushTask ditambahkan ke PushQueue menggunakan metode addTasks().

Contoh kode berikut menunjukkan cara menambahkan satu tugas:

$task = new PushTask(
    '/worker',
    ['name' => 'john doe', 'action' => 'send_reminder']);
$task_name = $task->add();

Contoh kode berikut menunjukkan cara menambahkan beberapa tugas sekaligus:

$task1 = new PushTask('/someUrl');
$task2 = new PushTask('/someOtherUrl');
$queue = new PushQueue();
$queue->addTasks([$task1, $task2]);

Saat Anda menggunakan PushTask dan PushQueue, sertakan pernyataan berikut di bagian atas file PHP Anda:

use google\appengine\api\taskqueue\PushTask;
use google\appengine\api\taskqueue\PushQueue;

Menentukan layanan worker

Saat tugas dikeluarkan dari antreannya, layanan Task Queue akan mengirimkannya ke layanan worker. Setiap tugas memiliki target dan url, yang menentukan layanan dan pengendali yang nantinya akan menjalankan tugas.

target

Target tersebut menentukan layanan yang akan menerima permintaan HTTP untuk menjalankan tugas. Ini adalah string yang menentukan layanan/versi/instance dalam salah satu formulir kanonis. Bentuk yang paling sering digunakan adalah:

    service
    version.service
    instance.version.service

String target ditambahkan ke nama domain aplikasi Anda. Ada tiga cara menetapkan target untuk tugas:

  • Deklarasikan target saat Anda membuat tugas. Anda dapat menetapkan target secara eksplisit saat membuat tugas menggunakan parameter header dalam array $options saat membuat objek PushTask:

    $task = new PushTask(
        '/worker',
        [],
        ['header' => "Host: versionHostname"]);

  • Sertakan perintah target saat Anda menentukan antrean di queue.yaml, sesuai dengan definisi queue-blue. Semua tugas yang ditambahkan ke antrean dengan target akan menggunakan target tersebut, meskipun target yang berbeda ditetapkan ke tugas tersebut saat proses pembuatan.

  • Jika tidak ada target yang ditentukan berdasarkan salah satu dari dua metode sebelumnya, target tugas adalah versi layanan yang mengantrekannya. Perhatikan bahwa jika Anda mengantrekan tugas dari layanan dan versi default dengan cara ini, dan versi default berubah sebelum tugas dijalankan, tugas tersebut akan berjalan dalam versi default yang baru.

url

url memilih salah satu pengendali dalam layanan target, yang akan menjalankan tugas.

url harus cocok dengan salah satu pola URL pengendali di layanan target. url dapat menyertakan parameter kueri jika metode yang ditentukan dalam tugas adalah GET atau PULL. Jika url tidak ditentukan, URL default /_ah/queue/[QUEUE_NAME] akan digunakan, dengan [QUEUE_NAME] sebagai nama antrean tugas.

Meneruskan data ke pengendali

Anda dapat meneruskan data ke pengendali sebagai parameter kueri di URL tugas, tetapi hanya jika metode yang ditentukan dalam tugas adalah GET atau PULL.

Konstruktor PushTask memiliki argumen posisi untuk query_data. Data tersebut biasanya berupa kamus pasangan nilai-kunci. Jika metode tugas adalah POST atau PUT, data akan ditambahkan ke payload permintaan HTTP. Jika metodenya GET, data akan ditambahkan ke URL sebagai parameter kueri.

Menamai tugas

Saat Anda membuat tugas baru, App Engine akan menetapkan nama yang unik pada tugas tersebut secara default. Namun, Anda dapat menetapkan nama Anda sendiri untuk tugas menggunakan parameter name. Keuntungan menetapkan nama tugas sendiri adalah tugas yang dinamai sendiri akan dihapus duplikatnya. Artinya, Anda dapat menggunakan nama tugas untuk menjamin bahwa tugas hanya ditambahkan sekali. Penghapusan duplikat akan berlanjut selama 9 hari setelah tugas diselesaikan atau dihapus.

Perlu diperhatikan bahwa logika penghapusan duplikat menimbulkan beban performa yang signifikan, sehingga mengakibatkan peningkatan latensi dan berpotensi meningkatkan tingkat error yang terkait dengan tugas bernama. Biaya ini dapat meningkat secara signifikan jika nama tugas berurutan, seperti dengan stempel waktu. Jadi, jika Anda menetapkan nama Anda sendiri, sebaiknya gunakan imbuhan yang didistribusikan dengan baik untuk nama tugas, seperti hash konten.

Jika Anda menetapkan nama Anda sendiri untuk tugas, perhatikan bahwa panjang nama maksimum adalah 500 karakter, dan nama tersebut dapat berisi huruf besar dan kecil, angka, garis bawah, dan tanda hubung.

Langkah berikutnya