ジョブ ルーター ルール エンジン

ジョブ ルーターでは、1 つ以上のルール エンジンを使用してデータを処理し、ジョブとワーカーに関する決定を行います。 このドキュメントでは、ルール エンジンの機能と、ルール エンジンの実装への適用が必要になる理由について説明します。

ルール エンジンの概要

多くの場合、実装の動作を制御するには、複雑な意思決定が含まれます。 ジョブ ルーターにより、さまざまなルール エンジンを使用してプログラムで動作を呼び出す柔軟な方法が提供されます。 通常は、ジョブ ルーターのルール エンジンによって、オブジェクトで定義されているラベル (ジョブ、キュー、worker など) のセットが入力として取得され、ルールが適用されて、出力が生成されます。

ジョブ ルーターでルールを適用する場所によって、結果が異なる場合があります。 たとえば、分類ポリシーでは、ジョブの入力で定義されているラベルに基づいて、キュー ID を選択できます。 別の例として、分散ポリシーでは、カスタム スコアリング規則を使用して、最適な Worker を見つけることができます。

ルール エンジンの種類

ジョブ ルーターには、次のルール エンジンの種類があり、ジョブを柔軟に処理できる方法を提供します。

静的ルール - このルールを使用すると、特定のキュー ID の選択など、静的な値を指定できます。

式ルール - 式ルールでは、PowerFx 言語を使用して、ルールをインライン式として定義します。

Azure 関数ルール - ジョブ ルーターが入力ラベルをペイロードとして Azure Function に渡し、出力値で応答できるようにします。

Webhook ルール - ジョブ ルーターが入力ラベルをペイロードとして Webhook に渡し、出力値で応答できるようにします。

直接マップ ルール - ジョブの入力ラベルを取得し、同じキーと値を持つワーカーまたはキュー セレクターのセットを出力します。 これは、以下ConditionalWorkerSelectorAttachmentでのみConditionalQueueSelectorAttachment使用する必要があります。

例: 静的ルールを使用してジョブの優先順位を設定する

この例では、 RouterRule のサブタイプ である StaticRouterRule を使用して、この分類ポリシーを使用するすべてのジョブの優先順位を設定できます。

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

例: 式ルールを使用してジョブの優先順位を設定する

この例では、RouterRule のサブタイプである ExpressionRouterRule が PowerFX 式を評価して、この分類ポリシーを使用するすべてのジョブの優先順位を設定します。

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

次のステップ