As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
EXECUTOR_SEQUENCIAL
Quando usar
A SEQUENTIAL_EXECUTOR executa uma série de funções, uma de cada vez, em ordem. Cada etapa pode usar os resultados das etapas anteriores.
Use SEQUENTIAL_EXECUTOR quando sua lógica exigir várias etapas que dependem dos resultados umas das outras. Os casos de uso comuns incluem buscar dados de identidade e usá-los para recuperar segmentos de público, executar uma etapa de classificação e, em seguida, chamar condicionalmente diferentes serviços externos com base no resultado e criar URLs complexos de solicitações de anúncios a partir de várias fontes de dados.
Campos de configuração
Uma SEQUENTIAL_EXECUTOR função tem os seguintes campos:
-
Runtime — A linguagem de expressão. Defina isso como
JSONATA. -
FunctionList— Uma lista ordenada de 1 a 10 etapas. Cada etapa especifica a função
FunctionIda ser executada. Opcionalmente, você pode adicionar umaRunConditionexpressão para controlar se a etapa é executada ou ignorada. -
Saída — Define os valores a serem produzidos após a conclusão de todas as etapas. Cada entrada mapeia uma chave de saída (como
player_params.envelope) para uma expressão que pode referenciar dados produzidos por qualquer etapa na sequência. Se for omitida, toda a saída das funções individuais na sequência será usada. -
TimeoutMilliseconds(obrigatório) — O tempo máximo para a conclusão de toda a sequência. Se a sequência exceder esse tempo limite, MediaTailor descartará toda a saída da sequência.
Execução ordenada e fluxo de dados
MediaTailor executa cada etapa da sequência da primeira à última. Após a conclusão de cada etapa, os valores que ela produz são mesclados em um conjunto contínuo de resultados. As etapas subsequentes podem acessar os dados da sessão original mais todos os valores produzidos pelas etapas anteriores.
Os dados temporários são o principal mecanismo para transmitir dados entre as etapas. Quando uma função grava em uma temp.* chave, a próxima etapa pode ler esse valor. Os parâmetros do player e os campos de solicitação de anúncios escritos nas etapas anteriores também são visíveis nas etapas posteriores.
nota
Os dados temporários aceitam qualquer tipo de dados, incluindo objetos e matrizes. Os parâmetros do player e os campos de solicitação de anúncio aceitam somente sequências de caracteres, números, booleanos e nulos).
Per-step condições de execução
Cada etapa da sequência tem um RunCondition campo opcional. Esse campo contém uma expressão que retorna true oufalse. MediaTailor avalia a RunCondition expressão imediatamente antes de executar essa etapa.
Se a RunCondition expressão for avaliada comofalse, MediaTailor pulará totalmente a etapa e passará para a próxima. Se o RunCondition campo for omitido, a etapa sempre será executada.
{ "FunctionId": "retryFetch", "RunCondition": "{%temp.statusCode = 500%}" }
Esse mecanismo permite criar pipelines condicionais. Por exemplo, você pode executar uma busca de identidade na etapa 1 e, em seguida, executar condicionalmente uma pesquisa de segmento na etapa 2 somente se a etapa 1 retornar uma identidade válida.
Como funciona o bloco de saída
O bloco de saída em um SEQUENTIAL_EXECUTOR controla o que a sequência produz após a conclusão de todas as etapas:
-
Bloco de saída presente — MediaTailor avalia as expressões no bloco de saída em relação ao estado acumulado final e salva somente essas saídas. Todas as saídas produzidas por etapas anteriores que não são referenciadas no bloco de saída sequencial são descartadas.
-
Bloco de saída ausente — MediaTailor salva diretamente todas as saídas acumuladas de todas as etapas.
dica
Omita o bloco de saída quando quiser que a saída de cada função passe. Adicione um bloco de saída quando precisar filtrar, renomear ou transformar os resultados acumulados antes de salvá-los.
Configuração de tempo limite
O TimeoutMilliseconds campo define um prazo para toda a sequência. Esse tempo limite abrange todas as etapas, incluindo todas as chamadas HTTP feitas por funções. Se a sequência exceder o tempo limite, MediaTailor descartará toda a saída da sequência e prosseguirá como se nenhuma função estivesse anexada.
HTTP_REQUESTAs funções individuais ainda respeitam sua própria RequestTimeoutMilliseconds configuração. O tempo limite da sequência atua como um limite externo que limita o tempo total de execução.
Exemplo: tente novamente em caso de falha de HTTP
Este exemplo chama uma API de identidade e tenta novamente automaticamente se a primeira chamada retornar um erro no servidor. Ele usa duas funções HTTP_REQUEST orquestradas por um SEQUENTIAL_EXECUTOR.
Etapa 1 — Busca primária (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%}" } } }
Etapa 2 — Tente novamente em caso de falha (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%}" } } }
Sequência (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%}" } } }
Como funciona:
-
fetchIdentitychama a API de identidade e grava o código de status e o envelope emtemp.*. -
Se o código de status for 500 ou superior, a
RunConditionetapa 2 será avaliadatrueeretryIdentityexecutada. Ele sobrescrevetemp.statusCodeetemp.envelopecom a resposta de nova tentativa. -
Se a primeira chamada for bem-sucedida, a etapa 2 será ignorada.
-
O bloco de saída da sequência grava
temp.envelopeemplayer_params.envelope.