你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
作业路由器可以使用一个或多个规则引擎来处理数据,并做出有关作业和辅助角色的决策。 本文档介绍规则引擎的作用,以及可能要在实现中应用此功能的原因。
规则引擎概述
控制实现的行为通常包括复杂的决策制定。 作业路由器提供了一种使用各种规则引擎以编程方式调用行为的灵活方式。 作业路由器的规则引擎通常将在对象(例如作业、队列或辅助角色)上定义的一组标签作为输入,应用规则并生成输出。
根据在作业路由器中应用规则的位置,结果可能会有所不同。 例如,分类策略可根据在作业输入上定义的标签选择队列 ID。 在另一示例中,分发策略可使用自定义评分规则查找最佳辅助角色。
规则引擎类型
作业路由器中存在以下规则引擎类型,以灵活地处理作业。
静态规则 - 用于指定静态值,例如选择特定的队列 ID。
表达式规则 - 使用 PowerFx 语言将规则定义为内联表达式。
Azure Functions 规则 - 允许作业路由器将输入标签作为有效负载传递给 Azure Functions,并返回输出值。
Webhook 规则 - 允许作业路由器将输入标签作为有效负载传递给 Webhook,并使用输出值进行响应。
直接映射规则 - 获取作业上的输入标签,并输出一组具有相同键和值的辅助角色或队列选择器。 这只能用于 ConditionalQueueSelectorAttachment 或 ConditionalWorkerSelectorAttachment.
示例:使用静态规则设置作业的优先级
在 StaticRouterRule 的示例中,a 是 RouterRule 子类型,可用于设置使用此分类策略的所有作业的优先级。
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))));
示例:使用表达式规则设置作业的优先级
在此示例中 ExpressionRouterRule ,计算 RouterRulePowerFX 表达式,以设置使用此分类策略的所有作业的优先级。
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)")));