Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Eksekutor berurutan
Kapan harus digunakan
A SEQUENTIAL_EXECUTOR menjalankan serangkaian fungsi satu per satu, secara berurutan. Setiap langkah dapat menggunakan hasil dari langkah-langkah sebelumnya.
Gunakan SEQUENTIAL_EXECUTOR ketika logika Anda memerlukan beberapa langkah yang bergantung pada hasil satu sama lain. Kasus penggunaan umum termasuk mengambil data identitas dan kemudian menggunakannya untuk mengambil segmen audiens, menjalankan langkah klasifikasi dan kemudian memanggil layanan eksternal yang berbeda secara kondisional berdasarkan hasilnya, dan membangun URL permintaan iklan yang kompleks dari beberapa sumber data.
Bidang konfigurasi
SEQUENTIAL_EXECUTORFungsi memiliki bidang berikut:
-
Runtime — Bahasa ekspresi. Atur ini ke
JSONATA. -
FunctionList— Daftar berurutan dari 1 hingga 10 langkah. Setiap langkah menentukan
FunctionIdfungsi yang akan dijalankan. Secara opsional, Anda dapat menambahkanRunConditionekspresi untuk mengontrol apakah langkah berjalan atau dilewati. -
Output — Mendefinisikan nilai yang akan dihasilkan setelah semua langkah selesai. Setiap entri memetakan kunci keluaran (seperti
player_params.envelope) ke ekspresi yang dapat mereferensikan data yang dihasilkan oleh langkah apa pun dalam urutan. Jika dihilangkan, semua output dari fungsi individu dalam urutan digunakan. -
TimeoutMilliseconds(wajib) — Waktu maksimum untuk menyelesaikan seluruh urutan. Jika urutan melebihi batas waktu ini, membu MediaTailor ang semua output dari urutan.
Eksekusi yang dipesan dan aliran data
MediaTailor menjalankan setiap langkah dalam urutan dari pertama hingga terakhir. Setelah setiap langkah selesai, nilai-nilai yang dihasilkannya digabungkan menjadi serangkaian hasil yang berjalan. Langkah selanjutnya dapat mengakses data sesi asli ditambah semua nilai yang dihasilkan oleh langkah-langkah sebelumnya.
Data sementara adalah mekanisme utama untuk meneruskan data antar langkah. Ketika fungsi menulis ke temp.* kunci, langkah selanjutnya dapat membaca nilai itu. Parameter pemain dan bidang permintaan iklan yang ditulis oleh langkah-langkah sebelumnya juga terlihat untuk langkah selanjutnya.
catatan
Data sementara menerima jenis data apa pun, termasuk objek dan array. Parameter pemain dan bidang permintaan iklan hanya menerima string, angka, boolean, dan null).
Per-step kondisi jalankan
Setiap langkah dalam urutan memiliki RunCondition bidang opsional. Bidang ini berisi ekspresi yang mengembalikan true ataufalse. MediaTailor mengevaluasi RunCondition ekspresi segera sebelum menjalankan langkah itu.
Jika RunCondition ekspresi dievaluasi kefalse, MediaTailor melewatkan langkah seluruhnya dan pindah ke langkah berikutnya. Jika RunCondition bidang dihilangkan, langkah selalu berjalan.
{ "FunctionId": "retryFetch", "RunCondition": "{%temp.statusCode = 500%}" }
Mekanisme ini memungkinkan Anda membangun pipeline bersyarat. Misalnya, Anda dapat menjalankan pengambilan identitas di langkah 1, lalu menjalankan pencarian segmen secara kondisional di langkah 2 hanya jika langkah 1 mengembalikan identitas yang valid.
Cara kerja blok keluaran
Blok keluaran pada a SEQUENTIAL_EXECUTOR mengontrol apa yang dihasilkan urutan setelah semua langkah selesai:
-
Blok keluaran hadir — MediaTailor mengevaluasi ekspresi dalam blok keluaran terhadap keadaan akumulasi akhir dan hanya menyimpan output tersebut. Setiap output yang dihasilkan oleh langkah-langkah sebelumnya yang tidak direferensikan dalam blok output berurutan dibuang.
-
Blok keluaran tidak ada - MediaTailor menyimpan semua akumulasi output dari semua langkah secara langsung.
Tip
Hilangkan blok output saat Anda ingin keluaran setiap fungsi melewatinya. Tambahkan blok output saat Anda perlu memfilter, mengganti nama, atau mengubah hasil yang terakumulasi sebelum menyimpannya.
Konfigurasi waktu habis
Bid TimeoutMilliseconds ang menetapkan batas waktu untuk seluruh urutan. Batas waktu ini mencakup semua langkah, termasuk panggilan HTTP yang dilakukan oleh fungsi. Jika urutan melebihi batas waktu, membuang MediaTailor semua output dari urutan dan melanjutkan seolah-olah tidak ada fungsi yang dilampirkan.
HTTP_REQUESTFungsi individu masih menghormati RequestTimeoutMilliseconds pengaturan mereka sendiri. Batas waktu urutan bertindak sebagai batas luar yang membatasi total waktu eksekusi.
Contoh: Coba lagi pada kegagalan HTTP
Contoh ini memanggil API identitas dan secara otomatis mencoba lagi jika panggilan pertama mengembalikan kesalahan server. Ini menggunakan dua fungsi HTTP_REQUEST yang diatur oleh SEQUENTIAL_EXECUTOR.
Langkah 1 — Primary fetch (fetchIdentity):
{ "FunctionId": "fetchIdentity", "FunctionType": "HTTP_REQUEST", "HttpRequestConfiguration": { "Runtime": "JSONATA", "MethodType": "GET", "Url": "{%'https://identity.example.com/v1/resolve?ip=' & session.client_ip%}", "Headers": { "Accept": "application/json" }, "RequestTimeoutMilliseconds": 1000, "Output": { "temp.statusCode": "{%response.statusCode%}", "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}" } } }
Langkah 2 - Coba lagi pada kegagalan (retryIdentity):
{ "FunctionId": "retryIdentity", "FunctionType": "HTTP_REQUEST", "HttpRequestConfiguration": { "Runtime": "JSONATA", "MethodType": "GET", "Url": "{%'https://identity-fallback.example.com/v1/resolve?ip=' & session.client_ip%}", "Headers": { "Accept": "application/json" }, "RequestTimeoutMilliseconds": 1000, "Output": { "temp.statusCode": "{%response.statusCode%}", "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}" } } }
Urutan (identityWithRetry):
{ "FunctionId": "identityWithRetry", "FunctionType": "SEQUENTIAL_EXECUTOR", "SequentialExecutorConfiguration": { "Runtime": "JSONATA", "TimeoutMilliseconds": 2000, "FunctionList": [ { "FunctionId": "fetchIdentity" }, { "FunctionId": "retryIdentity", "RunCondition": "{%temp.statusCode >= 500%}" } ], "Output": { "player_params.envelope": "{%temp.envelope%}" } } }
Cara kerjanya:
-
fetchIdentitymemanggil API identitas dan menulis kode status dan amplop ketemp.*. -
Jika kode status 500 atau lebih tinggi, langkah 2 mengevaluasi
truedanretryIdentityberjalan.RunConditionIni menggantitemp.statusCodedantemp.envelopedengan respons coba lagi. -
Jika panggilan pertama berhasil, langkah 2 dilewati.
-
Blok Output urutan menulis
temp.envelopekeplayer_params.envelope.