Pojemność procesu roboczego routera zadań

Podczas konfigurowania procesów roboczych chcemy określić, ile zadań może obsłużyć proces roboczy naraz z różnych kanałów. Tę konfigurację można wykonać, określając łączną pojemność procesu roboczego i przypisując koszt zadania dla każdego kanału.

Przykład: Proces roboczy, który może obsługiwać jedno zadanie głosowe lub maksymalnie pięć zadań czatu

W tym przykładzie skonfigurujemy proces roboczy z łączną pojemnością 100 i ustawimy kanał głosowy tak, aby zużywał 100 pojemności na zadanie, a kanał czatu zużywał 20 pojemności na zadanie. Ta konfiguracja oznacza, że proces roboczy może obsługiwać jedno zadanie głosowe jednocześnie lub maksymalnie pięć zadań czatu. Jeśli proces roboczy obsługuje co najmniej jedno zadania czatu, pracownik nie może wykonywać żadnych zadań głosowych, dopóki te zadania czatu nie zostaną ukończone. Jeśli pracownik obsługuje zadanie głosowe, pracownik nie może podjąć żadnych zadań czatu do momentu ukończenia zadania głosowego.

var worker = await client.CreateWorkerAsync(
    new CreateWorkerOptions(workerId: "worker1", capacity: 100)
    {
        Queues = { "queue1" },
        Channels =
        {
            new RouterChannel(channelId: "voice", capacityCostPerJob: 100),
            new RouterChannel(channelId: "chat", capacityCostPerJob: 20)
        }
    });
await client.path("/routing/workers/{workerId}", "worker1").patch({
    body: {
        capacity: 100,
        queues: ["queue1"],
        channels: [
            { channelId: "voice", capacityCostPerJob: 100 },
            { channelId: "chat", capacityCostPerJob: 20 },
        ]
    },
    contentType: "application/merge-patch+json"
});
client.upsert_worker(worker_id = "worker1",
    capacity = 100,
    queues = ["queue1"],
    channels = [
        RouterChannel(channel_id = "voice", capacity_cost_per_job = 100),
        RouterChannel(channel_id = "chat", capacity_cost_per_job = 20)
    ]
)
client.createWorker(new CreateWorkerOptions("worker1", 100)
    .setQueues(List.of("queue1"))
    .setChannels(List.of(
        new RouterChannel("voice", 100),
        new RouterChannel("chat", 20))));

Przykład: Proces roboczy, który może obsługiwać jedno zadania głosowe i maksymalnie dwa zadania czatu i dwa zadania poczty e-mail w tym samym czasie

W tym przykładzie proces roboczy jest skonfigurowany z łączną pojemnością 100. Następnie kanał głosowy jest ustawiony tak, aby zużywał 60 pojemności na zadanie, a kanały czatu i poczty e-mail zużywają 10 pojemności na zadanie z zestawem maxNumberOfJobs do dwóch. Ta konfiguracja oznacza, że proces roboczy może obsługiwać jedno zadanie głosowe jednocześnie i maksymalnie dwa zadania czatu i maksymalnie dwa zadania poczty e-mail. Ponieważ kanały czatu i poczty e-mail są skonfigurowane z dwoma kanałami maxNumberOfJobs , te kanały zużywają maksymalnie 40 pojemności w sumie. W związku z tym proces roboczy zawsze może obsługiwać maksymalnie jedno zadanie głosowe. Kanał głosowy ma "priorytet" w innych kanałach.

var worker = await client.CreateWorkerAsync(
    new CreateWorkerOptions(workerId: "worker1", capacity: 100)
    {
        Queues = { "queue1" },
        Channels =
        {
            new RouterChannel(channelId: "voice", capacityCostPerJob: 60),
            new RouterChannel(channelId: "chat", capacityCostPerJob: 10) { MaxNumberOfJobs = 2},
            new RouterChannel(channelId: "email", capacityCostPerJob: 10) { MaxNumberOfJobs = 2}
        }
    });
await client.path("/routing/workers/{workerId}", "worker1").patch({
    body: {
        capacity: 100,
        queues: ["queue1"],
        channels: [
            { channelId: "voice", capacityCostPerJob: 60 },
            { channelId: "chat", capacityCostPerJob: 10, maxNumberOfJobs: 2 },
            { channelId: "email", capacityCostPerJob: 10, maxNumberOfJobs: 2 }
        ]
    },
    contentType: "application/merge-patch+json"
});
client.upsert_worker(worker_id = "worker1",
    capacity = 100,
    queues = ["queue1"],
    channels = [
        RouterChannel(channel_id = "voice", capacity_cost_per_job = 60),
        RouterChannel(channel_id = "chat", capacity_cost_per_job = 10, max_number_of_jobs = 2),
        RouterChannel(channel_id = "email", capacity_cost_per_job = 10, max_number_of_jobs = 2)
    ]
)
client.createWorker(new CreateWorkerOptions("worker1", 100)
    .setQueues(List.of("queue1"))
    .setChannels(List.of(
        new RouterChannel("voice", 60),
        new RouterChannel("chat", 10).setMaxNumberOfJobs(2),
        new RouterChannel("email", 10).setMaxNumberOfJobs(2))));

Następne kroki