작업 라우터 규칙 엔진
작업 라우터는 하나 이상의 규칙 엔진을 사용하여 데이터를 처리하고 작업 및 작업자에 대한 결정을 내릴 수 있습니다. 이 문서에서는 규칙 엔진이 수행하는 작업과 이를 구현에 적용하려는 이유에 대해 설명합니다.
규칙 엔진 개요
구현 동작 제어에는 종종 복잡한 의사 결정이 포함될 수 있습니다. 작업 라우터는 다양한 규칙 엔진을 사용하여 프로그래밍 방식으로 동작을 호출하는 유연한 방법을 제공합니다. 작업 라우터의 규칙 엔진은 일반적으로 작업, 큐 또는 작업자와 같은 개체에 정의된 레이블 집합을 입력으로 사용하고 규칙을 적용하고 출력을 생성합니다.
작업 라우터에서 규칙을 적용하는 위치에 따라 결과가 달라질 수 있습니다. 예를 들어, 분류 정책은 작업 입력에 정의된 레이블을 기반으로 큐 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)")));