Udostępnij za pośrednictwem


Aparaty reguł routera zadań

Router zadań może używać co najmniej jednego aparatów reguł do przetwarzania danych i podejmowania decyzji dotyczących zadań i procesów roboczych. W tym dokumencie opisano, co robią aparaty reguł i dlaczego warto je zastosować w implementacji.

Omówienie aparatu reguł

Kontrolowanie zachowania implementacji może często obejmować złożone podejmowanie decyzji. Router zadań zapewnia elastyczny sposób programowego wywoływania zachowania przy użyciu różnych aparatów reguł. Aparaty reguł routera zadań zazwyczaj przyjmują zestaw etykiet zdefiniowanych na obiektach, takich jak zadanie, kolejka lub proces roboczy jako dane wejściowe, stosuje regułę i generuje dane wyjściowe.

W zależności od tego, gdzie stosujesz reguły w routerze zadań, wynik może się różnić. Na przykład zasady klasyfikacji mogą wybrać identyfikator kolejki na podstawie etykiet zdefiniowanych na danych wejściowych zadania. W innym przykładzie zasady dystrybucji mogą znaleźć najlepszy proces roboczy przy użyciu niestandardowej reguły oceniania.

Typy aparatu reguł

W routerze zadań istnieją następujące typy aparatu reguł, aby zapewnić elastyczność przetwarzania zadań.

Reguła statyczna — służy do określania wartości statycznej, takiej jak wybieranie określonego identyfikatora kolejki.

Reguła wyrażeń — używa języka PowerFx do zdefiniowania reguły jako wyrażenia wbudowanego.

Reguła funkcji platformy Azure — umożliwia routerowi zadań przekazywanie etykiet wejściowych jako ładunku do funkcji platformy Azure i odpowiadanie z powrotem wartością wyjściową.

Reguła elementu webhook — umożliwia routerowi zadań przekazywanie etykiet wejściowych jako ładunku do elementu webhook i odpowiadanie z powrotem wartością wyjściową.

Reguła mapy bezpośredniej — pobiera etykiety wejściowe dla zadania i generuje zestaw selektorów procesów roboczych lub kolejek z tymi samymi kluczami i wartościami. Powinno to być używane tylko w elemecie ConditionalQueueSelectorAttachment lub ConditionalWorkerSelectorAttachment.

Przykład: użyj reguły statycznej, aby ustawić priorytet zadania

W tym przykładzie element StaticRouterRule, który jest podtypem RouterRule , może służyć do ustawiania priorytetu wszystkich zadań, które używają tych zasad klasyfikacji.

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))));

Przykład: użyj reguły wyrażenia, aby ustawić priorytet zadania

W tym przykładzie, ExpressionRouterRule który jest podtypem RouterRule, oblicza wyrażenie PowerFX w celu ustawienia priorytetu wszystkich zadań korzystających z tych zasad klasyfikacji.

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)")));

Następne kroki