작업 라우터 규칙 엔진

작업 라우터는 하나 이상의 규칙 엔진을 사용하여 데이터를 처리하고 작업 및 작업자에 대한 결정을 내릴 수 있습니다. 이 문서에서는 규칙 엔진이 수행하는 작업과 이를 구현에 적용하려는 이유에 대해 설명합니다.

규칙 엔진 개요

구현 동작 제어에는 종종 복잡한 의사 결정이 포함될 수 있습니다. 작업 라우터는 다양한 규칙 엔진을 사용하여 프로그래밍 방식으로 동작을 호출하는 유연한 방법을 제공합니다. 작업 라우터의 규칙 엔진은 일반적으로 작업, 큐 또는 작업자와 같은 개체에 정의된 레이블 집합을 입력으로 사용하고 규칙을 적용하고 출력을 생성합니다.

작업 라우터에서 규칙을 적용하는 위치에 따라 결과가 달라질 수 있습니다. 예를 들어, 분류 정책은 작업 입력에 정의된 레이블을 기반으로 큐 ID를 선택할 수 있습니다. 또 다른 예에서 배포 정책은 사용자 지정 점수 규칙을 사용하여 최상의 작업자를 찾을 수 있습니다.

규칙 엔진 형식

작업 처리 방법에 유연성을 제공하기 위해 다음 규칙 엔진 형식이 작업 라우터에 있습니다.

정적 규칙 - 특정 큐 ID 선택과 같은 정적 값을 지정하는 데 사용됩니다.

식 규칙 -PowerFx 언어를 사용하여 규칙을 인라인 식으로 정의합니다.

Azure 함수 규칙 - 작업 라우터가 입력 레이블을 페이로드로 Azure 함수에 전달하고 출력 값으로 응답하도록 허용합니다.

웹후크 규칙 - 작업 라우터가 입력 레이블을 페이로드로 웹후크에 전달하고 출력 값으로 응답하도록 허용합니다.

직접 맵 규칙 - 작업에서 입력 레이블을 가져와 동일한 키와 값으로 작업자 또는 큐 선택기 집합을 출력합니다. ConditionalQueueSelectorAttachment 또는 ConditionalWorkerSelectorAttachment만 사용해야 합니다.

예: 정적 규칙을 사용하여 작업 우선 순위 설정

이 예에서는 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)")));

다음 단계