Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El enrutador de trabajos puede usar uno o varios motores de reglas para procesar datos y tomar decisiones sobre los trabajos y los trabajadores. En este documento se explica lo que hace el motor de reglas y por qué podría querer aplicarlo en la implementación.
Información general sobre el motor de reglas
Controlar el comportamiento de la implementación a menudo puede incluir la toma de decisiones complejas. El enrutador de trabajo proporciona una manera flexible de invocar el comportamiento mediante programación a través de varios motores de reglas. Los motores de reglas del enrutador de trabajos suelen tomar un conjunto de etiquetas definidas en objetos como un trabajo o una cola como entrada, aplican la regla y generan una salida.
El resultado puede variar en función de dónde aplique las reglas en el enrutador de trabajos. Por ejemplo, una directiva de clasificación puede elegir un identificador de cola en función de las etiquetas definidas en la entrada de un trabajo. En otro ejemplo, una directiva de distribución puede encontrar el mejor trabajador mediante una regla de puntuación personalizada.
Tipos de motores de reglas
Los tipos de motores de reglas siguientes existen en el enrutador de trabajos para proporcionar flexibilidad en la manera de procesar los trabajos.
Regla estática: se usa para especificar un valor estático, como seleccionar un identificador de cola específico.
Regla de expresión: usa el lenguaje PowerFx para definir la regla como una expresión insertada.
Regla de Azure Function: permite que el enrutador de trabajos pase las etiquetas de entrada como una carga útil a una función de Azure y responde, a su vez, con un valor de salida.
Regla de webhook: permite que el enrutador de trabajos pase las etiquetas de entrada como una carga a un webhook y responda de nuevo con un valor de salida.
Regla de asignación directa: toma las etiquetas de entrada en un trabajo y genera un conjunto de selectores de trabajo o cola con la misma clave y valores. Esto solo debe usarse en o ConditionalQueueSelectorAttachment
ConditionalWorkerSelectorAttachment
.
Ejemplo: Uso de una regla estática para establecer la prioridad de un trabajo
En este ejemplo, se puede usar un elemento StaticRouterRule
, que es un subtipo de RouterRule
, para establecer la prioridad de todos los trabajos que usan esta directiva de clasificación.
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))));
Ejemplo: Uso de una regla de expresión para establecer la prioridad de un trabajo
En este ejemplo, que ExpressionRouterRule
es un subtipo de RouterRule
, evalúa una expresión de PowerFX para establecer la prioridad de todos los trabajos que usan esta directiva de clasificación.
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)")));