Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Exécuteur séquentiel
Quand l’utiliser
A SEQUENTIAL_EXECUTOR exécute une série de fonctions une par une, dans l'ordre. Chaque étape peut utiliser les résultats des étapes précédentes.
SEQUENTIAL_EXECUTORÀ utiliser lorsque votre logique nécessite plusieurs étapes qui dépendent des résultats des uns et des autres. Les cas d'utilisation courants incluent la récupération de données d'identité, puis leur utilisation pour récupérer des segments d'audience, l'exécution d'une étape de classification, puis l'appel conditionnel de différents services externes en fonction du résultat, et la création d'URL de demandes d'annonces complexes à partir de plusieurs sources de données.
Champs de configuration
Une SEQUENTIAL_EXECUTOR fonction comporte les champs suivants :
-
Runtime : langage d'expression. Réglez ce paramètre sur
JSONATA. -
FunctionList— Une liste ordonnée de 1 à 10 étapes. Chaque étape indique
FunctionIdla fonction à exécuter. Vous pouvez éventuellement ajouter uneRunConditionexpression pour contrôler si l'étape est exécutée ou ignorée. -
Sortie : définit les valeurs à produire une fois toutes les étapes terminées. Chaque entrée associe une clé de sortie (telle que
player_params.envelope) à une expression qui peut faire référence à des données produites par n'importe quelle étape de la séquence. En cas d'omission, toutes les sorties des différentes fonctions de la séquence sont utilisées. -
TimeoutMilliseconds(obligatoire) — Durée maximale nécessaire à la fin de l'ensemble de la séquence. Si la séquence dépasse ce délai, MediaTailor supprime toutes les sorties de la séquence.
Exécution ordonnée et flux de données
MediaTailor exécute chaque étape de la séquence de la première à la dernière. Une fois chaque étape terminée, les valeurs produites sont fusionnées dans un ensemble de résultats. Les étapes suivantes peuvent accéder aux données de session d'origine ainsi qu'à toutes les valeurs produites par les étapes précédentes.
Les données temporaires constituent le principal mécanisme de transmission des données entre les étapes. Lorsqu'une fonction écrit sur une temp.* touche, l'étape suivante permet de lire cette valeur. Les paramètres du joueur et les champs de demande d'annonces écrits lors des étapes précédentes sont également visibles lors des étapes suivantes.
Note
Les données temporaires acceptent tous les types de données, y compris les objets et les tableaux. Les paramètres du lecteur et les champs de demande d'annonces n'acceptent que les chaînes, les nombres, les booléens et les valeurs nulles).
Per-step conditions de course
Chaque étape de la séquence comporte un RunCondition champ facultatif. Ce champ contient une expression qui renvoie true oufalse. MediaTailor évalue l'RunConditionexpression immédiatement avant d'exécuter cette étape.
Si l'RunConditionexpression est évaluée àfalse, MediaTailor saute complètement l'étape et passe à la suivante. Si le RunCondition champ est omis, l'étape est toujours exécutée.
{ "FunctionId": "retryFetch", "RunCondition": "{%temp.statusCode = 500%}" }
Ce mécanisme vous permet de créer des pipelines conditionnels. Par exemple, vous pouvez exécuter une recherche d'identité à l'étape 1, puis exécuter une recherche de segment de manière conditionnelle à l'étape 2 uniquement si l'étape 1 a renvoyé une identité valide.
Comment fonctionne le bloc de sortie
Le bloc de sortie sur a SEQUENTIAL_EXECUTOR contrôle ce que produit la séquence une fois toutes les étapes terminées :
-
Bloc de sortie présent : MediaTailor évalue les expressions du bloc de sortie par rapport à l'état cumulé final et enregistre uniquement ces sorties. Toutes les sorties produites par les étapes précédentes qui ne sont pas référencées dans le bloc de sortie séquentiel sont supprimées.
-
Bloc de sortie absent : MediaTailor enregistre directement toutes les sorties accumulées de toutes les étapes.
Astuce
Omettez le bloc de sortie lorsque vous souhaitez que la sortie de chaque fonction passe. Ajoutez un bloc de sortie lorsque vous devez filtrer, renommer ou transformer les résultats cumulés avant de les enregistrer.
Configuration du délai d’attente
Le TimeoutMilliseconds champ définit une date limite pour l'ensemble de la séquence. Ce délai couvre toutes les étapes, y compris les appels HTTP effectués par les fonctions. Si la séquence dépasse le délai d'attente, MediaTailor supprime toutes les sorties de la séquence et procède comme si aucune fonction n'était attachée.
Les HTTP_REQUEST fonctions individuelles respectent toujours leur propre RequestTimeoutMilliseconds réglage. Le délai d'attente de la séquence agit comme une limite extérieure qui limite le temps d'exécution total.
Exemple : Réessayez en cas d'échec HTTP
Cet exemple appelle une API d'identité et réessaie automatiquement si le premier appel renvoie une erreur de serveur. Il utilise deux fonctions HTTP_REQUEST orchestrées par un SEQUENTIAL_EXECUTOR.
Étape 1 — Récupération principale (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%}" } } }
Étape 2 — Réessayez en cas d'échec (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%}" } } }
Séquence (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%}" } } }
Comment ça fonctionne :
-
fetchIdentityappelle l'API d'identité et écrit le code d'état et l'enveloppe danstemp.*. -
Si le code d'état est supérieur ou égal à 500,
RunConditionl'étape 2 est évaluéetrueetretryIdentityexécutée. Il écrasetemp.statusCodeettemp.envelopeavec la réponse de nouvelle tentative. -
Si le premier appel a réussi, l'étape 2 est ignorée.
-
La séquence dans laquelle le bloc
temp.envelopede sortie écritplayer_params.envelope.