Sdílet prostřednictvím


Kapacita pracovního procesu směrovače úloh

Při konfiguraci pracovních procesů chceme poskytnout způsob, jak určit, kolik úloh může pracovní proces zpracovat najednou z různých kanálů. Tuto konfiguraci můžete provést zadáním celkové kapacity pracovního procesu a přiřazením nákladů na úlohu pro každý kanál.

Příklad: Pracovní proces, který dokáže zpracovat jednu hlasovou úlohu nebo až pět chatovacích úloh

V tomto příkladu nakonfigurujeme pracovní proces s celkovou kapacitou 100 a nastavíme hlasový kanál tak, aby spotřebovávat 100 kapacit na úlohu a chatovací kanál spotřebovávat 20 kapacit na úlohu. Tato konfigurace znamená, že pracovní proces může současně zpracovávat jednu hlasovou úlohu nebo až pět chatovacích úloh současně. Pokud pracovní proces zpracovává jednu nebo více chatovacích úloh, nemůže pracovní proces přijímat žádné hlasové úlohy, dokud se tyto úlohy chatu nedokončí. Pokud pracovní proces zpracovává hlasovou úlohu, nemůže pracovní proces provádět žádné úlohy chatu, dokud se hlasová úloha nedokončí.

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))));

Příklad: Pracovní proces, který může zpracovávat jednu hlasovou práci a až dvě chatovací úlohy a dvě e-mailové úlohy najednou

V tomto příkladu je pracovní proces nakonfigurovaný s celkovou kapacitou 100. Dále je hlasový kanál nastavený tak, aby spotřebovávat 60 kapacit na úlohu a chat a e-mailové kanály spotřebovaly 10 kapacit na každou úlohu s nastavenou maxNumberOfJobs na dvě. Tato konfigurace znamená, že pracovní proces může současně zpracovávat jednu hlasovou úlohu a až dvě chatovací úlohy a až dvě e-mailové úlohy najednou. Vzhledem k tomu, že chat a e-mailové kanály jsou nakonfigurované na dvě maxNumberOfJobs , spotřebovávají tyto kanály celkem až 40 kapacity. Pracovní proces proto může vždy zpracovat až jednu hlasovou úlohu. Hlasový kanál má přednost před ostatními kanály.

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))));

Další kroky