Aracılığıyla paylaş


Özel Durum İlkesi

Özel Durum İlkesi, bir koşul tetiklendiğinde hangi eylemlerin yürütüldüğünü tanımlayan bir kural kümesidir. Bu ilkeleri İş Yönlendiricisi'nin içine kaydedebilir ve sonra bunları bir veya daha fazla Kuyruğa ekleyebilirsiniz.

Tetikleyiciler

Eylemleri yönlendirmek için aşağıdaki tetikleyiciler kullanılabilir:

Kuyruk Uzunluğu - Kuyruğun uzunluğu, işi kuyruğa eklerken belirtilen eşiği aştığında tetikler.

Bekleme Süresi - İş belirtilen eşik için kuyrukta beklerken tetikler.

Bu tetikleyiciler tetiklendiğinde, bir veya daha fazla eylem yürütür ve Event Grid aracılığıyla Özel Durum Tetiklenen Bir Olay gönderir.

Eylemler

İptal - İşi iptal eder ve kuyruktan kaldırır.

Yeniden sınıflandır - Belirtilen Sınıflandırma İlkesini, değiştirilen etiketlerle işe yeniden uygulayın.

El ile Yeniden Sınıflandır - İşin kuyruğu, önceliğini ve çalışan seçicilerini değiştirir.

Örnekler

Aşağıdaki örnekte, bir işi 100'den uzun bir kuyruğa katılmadan önce iptal edecek bir özel durum ilkesi yapılandıracağız.

await administrationClient.CreateExceptionPolicyAsync(new CreateExceptionPolicyOptions(
    exceptionPolicyId: "maxQueueLength",
    exceptionRules: new List<ExceptionRule>
    {
        new (id: "cancelJob",
            trigger: new QueueLengthExceptionTrigger(threshold: 100),
            actions: new List<ExceptionAction>{ new CancelExceptionAction() })
    }) { Name = "Max Queue Length Policy" });
await administrationClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", "maxQueueLength").patch({
    body: {
        name: "Max Queue Length Policy",
        exceptionRules: [
        {
            id: "cancelJob",
            trigger: { kind: "queueLength", threshold: 100 },
            actions: [{ kind: "cancel" }]
        }
      ]
    }
});
administration_client.upsert_exception_policy(
    exception_policy_id = "maxQueueLength",
    name = "Max Queue Length Policy",
    exception_rules = [
        ExceptionRule(
            id = "cancelJob",
            trigger = QueueLengthExceptionTrigger(threshold = 100),
            actions = [ CancelExceptionAction() ]
        )
    ]
)
administrationClient.createExceptionPolicy(new CreateExceptionPolicyOptions("maxQueueLength",
    List.of(new ExceptionRule(
        "cancelJob",
        new QueueLengthExceptionTrigger(100),
        List.of(new CancelExceptionAction())))
).setName("Max Queue Length Policy"));

Aşağıdaki örnekte, aşağıdaki kurallarla bir Özel Durum İlkesi yapılandıracağız:

  • kuyrukta 1 dakika bekledikten sonra iş önceliğini 10 olarak ayarlayın.
  • İşi 5 dakika bekledikten sonra adresine queue2 taşıyın.
await administrationClient.CreateExceptionPolicyAsync(new CreateExceptionPolicyOptions(
    exceptionPolicyId: "policy2",
    exceptionRules: new List<ExceptionRule>
    {
        new(
            id: "increasePriority",
            trigger: new WaitTimeExceptionTrigger(threshold: TimeSpan.FromMinutes(1)),
            actions: new List<ExceptionAction>
            {
                new ManualReclassifyExceptionAction { Priority = 10 }
            }),
        new(
            id: "changeQueue",
            trigger: new WaitTimeExceptionTrigger(threshold: TimeSpan.FromMinutes(5)),
            actions: new List<ExceptionAction>
            {
                new ManualReclassifyExceptionAction { QueueId = "queue2" }
            })
    }) { Name = "Escalation Policy" });
await administrationClient.path("/routing/exceptionPolicies/{exceptionPolicyId}", "policy2").patch({
    body: {
        name: "Escalation Policy",
        exceptionRules: [
        {
            id: "increasePriority",
            trigger: { kind: "waitTime", thresholdSeconds: "60" },
            actions: [{ "manual-reclassify", priority: 10 }]
        },
        {
            id: "changeQueue",
            trigger: { kind: "waitTime", thresholdSeconds: "300" },
            actions: [{ kind: "manual-reclassify", queueId: "queue2" }]
        }]
    },
    contentType: "application/merge-patch+json"
  });
administration_client.upsert_exception_policy(
    exception_policy_id = "policy2",
    name = "Escalation Policy",
    exception_rules = [
        ExceptionRule(
            id = "increasePriority",
            trigger = WaitTimeExceptionTrigger(threshold_seconds = 60),
            actions = [ ManualReclassifyExceptionAction(priority = 10) ]
        ),
        ExceptionRule(
            id = "changeQueue",
            trigger = WaitTimeExceptionTrigger(threshold_seconds = 60),
            actions = [ ManualReclassifyExceptionAction(queue_id = "queue2") ]
        )
    ]
)
administrationClient.createExceptionPolicy(new CreateExceptionPolicyOptions("policy2", List.of(
    new ExceptionRule("increasePriority", new WaitTimeExceptionTrigger(Duration.ofMinutes(1)),
        List.of(new ManualReclassifyExceptionAction().setPriority(10))),
    new ExceptionRule("changeQueue", new WaitTimeExceptionTrigger(Duration.ofMinutes(5)),
        List.of(new ManualReclassifyExceptionAction().setQueueId("queue2"))))
).setName("Escalation Policy"));