View a markdown version of this page

Ejecutor secuencial - AWS Elemental MediaTailor

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejecutor secuencial

Cuándo se debe usar

A SEQUENTIAL_EXECUTOR ejecuta una serie de funciones de una en una, en orden. Cada paso puede usar los resultados de los pasos anteriores.

Utilízalo SEQUENTIAL_EXECUTOR cuando tu lógica requiera varios pasos que dependan de los resultados de los demás. Los casos de uso habituales incluyen obtener datos de identidad y, a continuación, usarlos para recuperar segmentos de audiencia, ejecutar un paso de clasificación y, a continuación, llamar de forma condicional a diferentes servicios externos en función del resultado, y crear URL de solicitud de anuncios complejas a partir de varias fuentes de datos.

Campos de configuración

Una SEQUENTIAL_EXECUTOR función tiene los siguientes campos:

  • Tiempo de ejecución: el lenguaje de expresiones. Establézcalo enJSONATA.

  • FunctionList— Una lista ordenada de 1 a 10 pasos. Cada paso especifica FunctionId la función que se va a ejecutar. Si lo desea, puede agregar una RunCondition expresión para controlar si el paso se ejecuta o se omite.

  • Salida: define los valores que se generarán una vez finalizados todos los pasos. Cada entrada asigna una clave de salida (por ejemploplayer_params.envelope) a una expresión que puede hacer referencia a los datos producidos en cualquier paso de la secuencia. Si se omite, se utilizan todos los resultados de las funciones individuales de la secuencia.

  • TimeoutMilliseconds(obligatorio): el tiempo máximo para completar toda la secuencia. Si la secuencia supera este tiempo de espera, MediaTailor descarta todos los resultados de la secuencia.

Ejecución ordenada y flujo de datos

MediaTailor ejecuta cada paso de la secuencia desde el primero hasta el último. Una vez completado cada paso, los valores que produce se combinan en un conjunto continuo de resultados. Los pasos posteriores pueden acceder a los datos de la sesión original y a todos los valores producidos en los pasos anteriores.

Los datos temporales son el mecanismo principal para pasar datos entre los pasos. Cuando una función escribe en una temp.* clave, el siguiente paso puede leer ese valor. Los parámetros del reproductor y los campos de solicitud de anuncios escritos en los pasos anteriores también están visibles en los pasos posteriores.

nota

Los datos temporales aceptan cualquier tipo de datos, incluidos objetos y matrices. Los parámetros del reproductor y los campos de solicitud de anuncios solo aceptan cadenas, números, valores booleanos y valores nulos.

Per-step condiciones de ejecución

Cada paso de la secuencia tiene un RunCondition campo opcional. Este campo contiene una expresión que devuelve true ofalse. MediaTailor evalúa la RunCondition expresión inmediatamente antes de ejecutar ese paso.

Si la RunCondition expresión se evalúa comofalse, MediaTailor omite el paso por completo y pasa al siguiente. Si se omite el RunCondition campo, el paso siempre se ejecuta.

{ "FunctionId": "retryFetch", "RunCondition": "{%temp.statusCode = 500%}" }

Este mecanismo permite crear canalizaciones condicionales. Por ejemplo, puedes realizar una búsqueda de identidades en el paso 1 y, a continuación, ejecutar de forma condicional una búsqueda de segmentos en el paso 2 solo si el paso 1 arroja una identidad válida.

Cómo funciona el bloque de salida

El bloque de salida de un SEQUENTIAL_EXECUTOR controla lo que produce la secuencia una vez completados todos los pasos:

  • Bloque de salida presente: MediaTailor evalúa las expresiones del bloque de salida comparándolas con el estado final acumulado y guarda solo esas salidas. Se descartan todas las salidas generadas en pasos anteriores a las que no se haga referencia en el bloque de salida secuencial.

  • Falta el bloque de salida: MediaTailor guarda directamente todas las salidas acumuladas de todos los pasos.

sugerencia

Omita el bloque de salida cuando desee que pase la salida de todas las funciones. Agregue un bloque de salida cuando necesite filtrar, cambiar el nombre o transformar los resultados acumulados antes de guardarlos.

Configuración del tiempo de espera

El TimeoutMilliseconds campo establece una fecha límite para toda la secuencia. Este tiempo de espera cubre todos los pasos, incluidas las llamadas HTTP realizadas por las funciones. Si la secuencia supera el tiempo de espera, MediaTailor descarta todos los resultados de la secuencia y continúa como si no hubiera ninguna función adjunta.

HTTP_REQUESTLas funciones individuales siguen respetando su propia configuración. RequestTimeoutMilliseconds El tiempo de espera de la secuencia actúa como un límite exterior que limita el tiempo total de ejecución.

Ejemplo: Reintentar en caso de error en HTTP

En este ejemplo se llama a una API de identidad y se vuelve a intentar automáticamente si la primera llamada devuelve un error del servidor. Utiliza dos funciones HTTP_REQUEST orquestadas por un SEQUENTIAL_EXECUTOR.

Paso 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%}" } } }

Paso 2: Reintentar en caso de error ()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%}" } } }

Secuencia (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%}" } } }

Cómo funciona:

  1. fetchIdentityllama a la API de identidad y escribe el código de estado y el sobre entemp.*.

  2. Si el código de estado es 500 o superior, RunCondition el paso 2 se evalúa true y se retryIdentity ejecuta. Sobrescribe temp.statusCode y temp.envelope con la respuesta de reintento.

  3. Si la primera llamada se realizó correctamente, se omite el paso 2.

  4. La secuencia en la que escribe temp.envelope el bloque Output. player_params.envelope