Job Router のワーカー処理能力

ワーカーの構成時には、ワーカーが一度に処理できるさまざまなチャネルからのジョブの数を指定する方法を提供する必要があります。 この構成は、ワーカーの総処理能力を指定し、各チャネルにジョブあたりのコストを割り当てることによって行えます。

例: 1 つの音声ジョブまたは最大 5 つのチャット ジョブを処理できるワーカー

この例では、総処理能力 100 のワーカーを構成し、音声チャネルではジョブあたり 100 処理能力を消費し、チャット チャネルではジョブごとに 20 処理能力を消費するように設定します。 この構成は、ワーカーが一度に 1 つの音声ジョブを処理できること、または同時に最大 5 つのチャット ジョブを処理できることを意味します。 ワーカーは、1 つ以上のチャット ジョブを処理中の場合、それらのチャット ジョブが完了するまで音声ジョブを引き受けることができません。 ワーカーは、音声ジョブを処理中の場合、その音声ジョブが完了するまでどのチャット ジョブも引き受けることができません。

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

例: 1 つの音声ジョブ、最大 2 つのチャット ジョブ、2 つの電子メール ジョブを同時に処理できるワーカー

この例では、ワーカーは総処理能力 100 で構成されています。 次に、音声チャネルはジョブごとに 60 の処理能力を、チャットと電子メールのチャネルは、それぞれジョブごとに 10 処理能力を消費するように設定され、maxNumberOfJobs は 2 に設定されます。 この構成は、ワーカーが一度に 1 つの音声ジョブを処理し、同時に最大 2 つのチャット ジョブと最大 2 つの電子メール ジョブを処理できることを意味します。 チャットと電子メールのチャネルは maxNumberOfJobs が 2 で構成されているため、それらのチャネルは、最大値である合計 40 までの処理能力を消費します。 そのため、ワーカーは常に最大 1 つの音声ジョブを処理できます。 音声チャネルは、他のチャネルよりも "優先" されます。

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

次のステップ