Capacidade de trabalho do Job Router

Ao configurar trabalhadores, queremos fornecer uma maneira de especificar quantos trabalhos um trabalhador pode lidar ao mesmo tempo a partir de vários canais. Essa configuração pode ser feita especificando a capacidade total do trabalhador e atribuindo um custo por trabalho para cada canal.

Exemplo: trabalhador que pode lidar com um trabalho de voz ou até cinco trabalhos de chat

Neste exemplo, configuramos um trabalhador com capacidade total de 100 e definimos o canal de voz para consumir 100 capacidade por trabalho e o canal de chat para consumir 20 capacidade por trabalho. Essa configuração significa que o trabalhador pode lidar com um trabalho de voz por vez ou até cinco trabalhos de bate-papo ao mesmo tempo. Se o trabalhador estiver lidando com um ou mais trabalhos de bate-papo, ele não poderá aceitar nenhum trabalho de voz até que esses trabalhos de bate-papo sejam concluídos. Se o trabalhador estiver lidando com um trabalho de voz, ele não poderá aceitar nenhum trabalho de bate-papo até que o trabalho de voz seja concluído.

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

Exemplo: trabalhador que pode lidar com um trabalho de voz e até dois trabalhos de chat e dois trabalhos de email ao mesmo tempo

Neste exemplo, um trabalhador é configurado com capacidade total de 100. Em seguida, o canal de voz é definido para consumir 60 capacidade por trabalho e os canais de chat e e-mail para consumir 10 capacidade por trabalho, cada um com um maxNumberOfJobs conjunto para dois. Essa configuração significa que o trabalhador pode lidar com um trabalho de voz de cada vez e até dois trabalhos de bate-papo e até dois trabalhos de e-mail ao mesmo tempo. Como os canais de chat e e-mail são configurados com um de dois, esses canais consomem até um maxNumberOfJobs máximo de 40 capacidade no total. Portanto, o trabalhador sempre pode lidar com até um trabalho de voz. O canal de voz tem "prioridade" sobre os outros canais.

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

Próximos passos