View a markdown version of this page

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

SECUENCIAL_EXECUTOR

Cuándo se debe usar

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

Úselo SEQUENTIAL_EXECUTOR cuando su lógica requiera varios pasos que dependan de los resultados de los demás. Entre los casos de uso más habituales se incluyen la obtención de datos de identidad y su posterior utilización para recuperar segmentos de audiencia, realizar un paso de clasificación y, a continuación, llamar de forma condicional a distintos servicios externos en función del resultado obtenido, y crear direcciones URL de solicitudes 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 expresión. 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 añadir una RunCondition expresión para controlar si el paso se ejecuta o se omite.

  • Salida: define los valores que se generarán una vez completados 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 generados por 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 que se complete 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 siguientes pueden acceder a los datos originales de la sesión y a todos los valores generados por 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 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 te permite crear canalizaciones condicionales. Por ejemplo, puede ejecutar una búsqueda de identidad 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 arrojó una identidad válida.

Cómo funciona el bloque de salida

El bloque de salida de a 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 acumulado final y guarda solo esas salidas. Se descartan todas las salidas producidas por pasos anteriores a las que no se haga referencia en el bloque de salida secuencial.

  • No hay 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. Añada 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 asociada.

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: reinténtelo en caso de error de 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 de 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: volver a intentarlo 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. Se 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 de salida. player_params.envelope