Freigeben über


Regel-Engines für Auftragsrouter

Der Auftragsrouter kann eine oder mehrere Regel-Engines verwenden, um Daten zu verarbeiten und Entscheidungen über Ihre Aufträge und Worker zu treffen. In diesem Dokument wird behandelt, was die Regel-Engines tun und warum Sie sie in Ihrer Implementierung anwenden möchten.

Übersicht über Regel-Engine

Die Steuerung des Verhaltens Ihrer Implementierung kann häufig eine komplexe Entscheidungsfindung umfassen. Der Auftragsrouter bietet eine flexible Möglichkeit, das Verhalten programmgesteuert mit verschiedenen Regel-Engines aufzurufen. Die Regel-Engines des Auftragsrouters verwenden im Allgemeinen einen Satz von Bezeichnungen, die für Objekte wie einen Auftrag, eine Warteschlange oder einen Worker als Eingabe definiert sind, wenden die Regel an und erzeugen eine Ausgabe.

Je nachdem, wo Sie Regeln im Auftragsrouter anwenden, kann das Ergebnis variieren. Beispielsweise kann eine Klassifizierungsrichtlinie eine Warteschlangen-ID basierend auf den Bezeichnungen auswählen, die in der Eingabe eines Auftrags definiert sind. In einem anderen Beispiel kann eine Verteilungsrichtlinie den besten Worker mithilfe einer benutzerdefinierten Bewertungsregel finden.

Regel-Engine-Typen

Die folgenden Regel-Engine-Typen sind im Auftragsrouter vorhanden, um Flexibilität bei der Verarbeitung Ihrer Aufträge zu bieten.

Statische Regel: Wird verwendet, um einen statischen Wert anzugeben, z. B. das Auswählen einer bestimmten Warteschlangen-ID.

Ausdrucksregel: Verwendet die PowerFx-Programmiersprache, um Ihre Regel als Inlineausdruck zu definieren.

Azure-Funktionsregel: Ermöglicht dem Auftragsrouter, die Eingabebezeichnungen als Nutzlast an eine Azure-Funktion zu übergeben und mit einem Ausgabewert zu antworten.

Webhook-Regel : Ermöglicht dem Auftragsrouter, die Eingabebezeichnungen als Nutzlast an einen Webhook zu übergeben und mit einem Ausgabewert zurückzugeben.

Direct Map-Regel – Verwendet die Eingabebezeichnungen für einen Auftrag und gibt eine Reihe von Arbeits- oder Warteschlangenselektoren mit demselben Schlüssel und denselben Werten aus. Dies sollte nur in der ConditionalQueueSelectorAttachment oder ConditionalWorkerSelectorAttachment.

Beispiel: Verwenden einer statischen Regel zum Festlegen der Priorität eines Auftrags

In diesem Beispiel kann ein StaticRouterRule mit einem Untertyp RouterRule die Priorität aller Aufträge festgelegt werden, die diese Klassifizierungsrichtlinie verwenden.

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

Beispiel: Verwenden einer Ausdrucksregel zum Festlegen der Priorität eines Auftrags

In diesem Beispiel wird ein ExpressionRouterRule Untertyp von RouterRule, der einen PowerFX-Ausdruck auswertet, um die Priorität aller Aufträge festzulegen, die diese Klassifizierungsrichtlinie verwenden.

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

Nächste Schritte