Partage via


Moteurs de règles de Job Router

Job Router peut utiliser un ou plusieurs moteurs de règles pour traiter les données et prendre des décisions concernant vos missions et vos collaborateurs. Ce document décrit l’action des moteurs de règles et explique pourquoi les appliquer à votre implémentation.

Vue d’ensemble du moteur de règles

Le contrôle du comportement de votre implémentation peut souvent inclure une prise de décision complexe. Le routeur de travaux offre un moyen flexible d’appeler le comportement programmatiquement à l’aide de divers moteurs de règles. Les moteurs de règles d’un routeur de travaux prennent généralement un ensemble d’étiquettes définies sur des objets comme un travail, une file d’attente ou un Worker en tant qu’entrée, ils appliquent la règle et produisent une sortie.

En fonction de l’endroit où vous appliquez des règles dans le routeur de travaux, le résultat peut varier. Par exemple, une stratégie de classification peut choisir un ID de file d’attente en fonction des étiquettes définies sur l’entrée d’un travail. Dans un autre exemple, une stratégie de distribution peut trouver le meilleur collaborateur en utilisant une règle de scoring personnalisée.

Types de moteurs de règles

Les types de moteurs de règles suivants existent dans Job Router pour offrir une certaine souplesse dans le traitement de vos missions.

Règle statique : Utilisée pour spécifier une valeur statique, comme la sélection d’un ID de file d’attente spécifique.

Règle d’expression : Utilise le langage PowerFx pour définir votre règle en tant qu’expression inlined.

Règle de fonction Azure : Permet à Job Router de transmettre les étiquettes d’entrée en tant que charge utile à une fonction Azure et de répondre avec une valeur de sortie.

Règle webhook : permet au routeur de travaux de transmettre les étiquettes d’entrée en tant que charge utile à un Webhook et de répondre avec une valeur de sortie.

Règle de mappage direct : prend les étiquettes d’entrée sur un travail et génère un ensemble de sélecteurs de travail ou de file d’attente avec la même clé et les mêmes valeurs. Cela ne doit être utilisé que dans le ConditionalQueueSelectorAttachment ou ConditionalWorkerSelectorAttachment.

Exemple : Utiliser une règle statique pour définir la priorité d’une mission

Dans cet exemple, une StaticRouterRule, qui est un sous-type de RouterRule, peut être utilisée pour définir la priorité de toutes les missions qui utilisent cette stratégie de classification.

await administrationClient.CreateClassificationPolicyAsync(
    new CreateClassificationPolicyOptions(classificationPolicyId: "my-policy-id")
    {
        PrioritizationRule = new StaticRouterRule(new RouterValue(5))
    });
await administrationClient.path("/routing/classificationPolicies/{classificationPolicyId}", "my-policy-id").patch({
    body: {
        prioritizationRule: { kind: "static", value: 5 }
    },
    contentType: "application/merge-patch+json"
  });
administration_client.upsert_classification_policy(
    classification_policy_id = "my-policy-id",
    prioritization_rule = StaticRouterRule(value = 5))
administrationClient.createClassificationPolicy(new CreateClassificationPolicyOptions("my-policy-id")
    .setPrioritizationRule(new StaticRouterRule(new RouterValue(5))));

Exemple : Utiliser une règle d’expression pour définir la priorité d’une mission

Dans cet exemple, un ExpressionRouterRule sous-type de RouterRule, évalue une expression PowerFX pour définir la priorité de tous les travaux qui utilisent cette stratégie de classification.

await administrationClient.CreateClassificationPolicyAsync(
    new CreateClassificationPolicyOptions(classificationPolicyId: "my-policy-id")
    {
        PrioritizationRule = new ExpressionRouterRule(expression: "If(job.Escalated = true, 10, 5)") // this will check whether the job has a label "Escalated" set to "true"
    });
await administrationClient.path("/routing/classificationPolicies/{classificationPolicyId}", "my-policy-id").patch({
    body: {
        prioritizationRule: {
            kind: "expression",
            expression: "If(job.Escalated = true, 10, 5)"
        }
    },
    contentType: "application/merge-patch+json"
});
administration_client.upsert_classification_policy(
    classification_policy_id = "my-policy-id",
    prioritization_rule = ExpressionRouterRule(expression = "If(job.Urgent = true, 10, 5)"))
administrationClient.createClassificationPolicy(
    new CreateClassificationPolicyOptions("my-policy-id")
        .setPrioritizationRule(new ExpressionRouterRule("If(job.Urgent = true, 10, 5)")));

Étapes suivantes