Guia de início rápido: Enviar um trabalho para enfileiramento e roteamento
Comece a usar o Roteador de Trabalhos dos Serviços de Comunicação do Azure configurando seu cliente e a funcionalidade principal, como filas, políticas, funções de trabalho e trabalhos. Para saber mais sobre os conceitos do Roteador de Trabalho, visite a documentação conceitual do Roteador de Trabalho
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Um recurso e uma cadeia de conexão ativos dos Serviços de Comunicação. Crie um recurso dos Serviços de Comunicação.
- A versão mais recente da biblioteca de clientes do .NET para o seu sistema operacional.
Código de exemplo
Você pode revisar e baixar o código de exemplo para este início rápido no GitHub.
Configurando
Criar um aplicativo em C#
Em uma janela de console (como cmd, PowerShell ou Bash), use o comando dotnet new
para criar um novo aplicativo do console com o nome JobRouterQuickstart
. Esse comando cria um projeto simples C# "Olá, Mundo" com um arquivo de origem único: Program.cs.
dotnet new console -o JobRouterQuickstart
Altere o seu diretório para a pasta de aplicativo recém-criada e use o comando dotnet build
para compilar o seu aplicativo.
cd JobRouterQuickstart
dotnet build
Instalar o pacote
Instale a biblioteca de clientes do Roteador de Trabalhos de Comunicação do Azure para .NET com NuGet:
dotnet add package Azure.Communication.JobRouter
Você precisará usar a biblioteca de clientes do Roteador de Trabalho de Comunicação do Azure para .NET versão 1.0.0 ou superior.
Adicione as diretivas using
a seguir à parte superior de Program.cs para incluir os namespaces de JobRouter.
using Azure.Communication.JobRouter;
Inicializar o cliente do Roteador de Trabalhos e o cliente de administração
Os clientes do Roteador de Trabalho podem ser autenticados usando a cadeia de conexão adquirida do recurso dos Serviços de Comunicação do Azure no portal do Azure. Geramos um cliente e um cliente de administração para interagir com o serviço do Roteador de Trabalhos. O cliente administrador é usado para provisionar filas e políticas, enquanto o cliente é usado para enviar trabalhos e registrar funções de trabalho. Para obter mais informações sobre cadeias de conexão, consulte access-your-connection-strings-and-service-endpoints.
// Get a connection string to our Azure Communication Services resource.
var routerAdminClient = new JobRouterAdministrationClient("your_connection_string");
var routerClient = new JobRouterClient("your_connection_string");
Criar uma política de distribuição
O Roteador de Trabalho usa uma política de distribuição para decidir como os as funções de trabalho serão notificadas sobre os trabalhos disponíveis e a vida útil das notificações, conhecidas como Ofertas. Crie a política especificando a ID, um nome, um offerExpiresAfter e um modo de distribuição.
var distributionPolicy = await routerAdminClient.CreateDistributionPolicyAsync(
new CreateDistributionPolicyOptions(
distributionPolicyId: "distribution-policy-1",
offerExpiresAfter: TimeSpan.FromMinutes(1),
mode: new LongestIdleMode())
{
Name = "My distribution policy"
}
);
Criar uma fila
Crie a fila especificando uma ID, um nome e forneça a ID do objeto de Política de distribuição que você criou acima.
var queue = await routerAdminClient.CreateQueueAsync(
new CreateQueueOptions(queueId: "queue-1", distributionPolicyId: distributionPolicy.Value.Id)
{
Name = "My Queue"
});
Enviar um trabalho
Agora, podemos enviar um trabalho diretamente para essa fila, com um seletor de trabalhador que exige que o trabalhador tenha o rótulo Some-Skill
maior que 10.
var job = await routerClient.CreateJobAsync(
new CreateJobOptions(jobId: "job-1", channelId: "voice", queueId: queue.Value.Id)
{
Priority = 1,
RequestedWorkerSelectors =
{
new RouterWorkerSelector(key: "Some-Skill", labelOperator: LabelOperator.GreaterThan, value: new RouterValue(10))
}
});
Criar um trabalhador
Agora, criamos um trabalhador para receber trabalho dessa fila, com o rótulo Some-Skill
igual a 11 e a capacidade em my-channel
.
var worker = await routerClient.CreateWorkerAsync(
new CreateWorkerOptions(workerId: "worker-1", capacity: 1)
{
Queues = { queue.Value.Id },
Labels = { ["Some-Skill"] = new RouterValue(11) },
Channels = { new RouterChannel(channelId: "voice", capacityCostPerJob: 1) },
AvailableForOffers = true
});
Receber uma oferta
Devemos obter um RouterWorkerOfferIssued da assinatura da Grade de Eventos. No entanto, também podemos aguardar alguns segundos e, em seguida, consultar o trabalhador diretamente na API do JobRouter para ver se uma oferta foi emitida para ela.
await Task.Delay(TimeSpan.FromSeconds(10));
worker = await routerClient.GetWorkerAsync(worker.Value.Id);
foreach (var offer in worker.Value.Offers)
{
Console.WriteLine($"Worker {worker.Value.Id} has an active offer for job {offer.JobId}");
}
Aceitar a oferta de trabalho
Em seguida, o trabalhador pode aceitar a oferta de trabalho usando o SDK, que atribui o trabalho à função de trabalho.
var accept = await routerClient.AcceptJobOfferAsync(workerId: worker.Value.Id, offerId: worker.Value.Offers.FirstOrDefault().OfferId);
Console.WriteLine($"Worker {worker.Value.Id} is assigned job {accept.Value.JobId}");
Concluir o trabalho
Depois que o trabalhador tiver concluído o trabalho associado ao cargo (por exemplo, a chamada foi concluída), concluiremos o trabalho.
await routerClient.CompleteJobAsync(new CompleteJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId));
Console.WriteLine($"Worker {worker.Value.Id} has completed job {accept.Value.JobId}");
Fechar o trabalho
Quando o trabalhador estiver pronto para assumir novos trabalhos, o trabalhador deverá fechar o trabalho. Opcionalmente, o trabalhador pode fornecer um código de disposição para indicar o resultado do trabalho.
await routerClient.CloseJobAsync(new CloseJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId) {
DispositionCode = "Resolved"
});
Console.WriteLine($"Worker {worker.Value.Id} has closed job {accept.Value.JobId}");
Excluir o trabalho
Depois que o trabalho for fechado, poderemos excluir o trabalho para que possamos recriar o trabalho com a mesma ID se executarmos este exemplo novamente
await routerClient.DeleteJobAsync(accept.Value.JobId);
Console.WriteLine($"Deleting job {accept.Value.JobId}");
Executar o código
Execute o aplicativo usando dotnet run
e observe os resultados.
dotnet run
Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1
Observação
Executar o aplicativo mais de uma vez fará com que um novo trabalho seja colocado na fila a cada vez. Isso pode fazer com que seja oferecido à função de trabalho um trabalho diferente daquele criado quando você executou o código acima. Como isso pode distorcer a solicitação, considere excluir os trabalhos da fila a cada vez. Veja a documentação do SDK para gerenciar uma fila ou um trabalho.
Documentação de referência
Leia sobre o conjunto completo de funcionalidades do Roteador de Trabalhos dos Serviços de Comunicação do Azure na referência do SDK do .NET ou referência da API REST.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Um recurso e uma cadeia de conexão ativos dos Serviços de Comunicação. Crie um recurso dos Serviços de Comunicação.
- As versões mais recentes dp LTS Ativo e do LTS de Manutenção do Node.js.
Código de exemplo
Você pode revisar e baixar o código de exemplo para este início rápido no GitHub.
Configurando
Criar um aplicativo Web
Em uma janela do console ou terminal, crie uma pasta para seu aplicativo e navegue até ela.
mkdir acs-router-quickstart && cd acs-router-quickstart
Execute npm init
para criar um arquivo package.json com as configurações padrão.
npm init -y
Crie um novo arquivo index.js
no qual você adicionará o código para este início rápido.
Instalar os pacotes
Você precisará usar a biblioteca de clientes do Roteador de Trabalho de Comunicação do Azure para JavaScript versão 1.0.0 ou superior.
Use o comando npm install
para instalar os SDKs dos Serviços de Comunicação abaixo para JavaScript.
npm install @azure-rest/communication-job-router --save
Configurar o framework de aplicativos
No arquivo index.js
, adicione o código a seguir. Adicionaremos o código para o início rápido na função main
.
const JobRouterClient = require('@azure-rest/communication-job-router').default;
const main = async () => {
console.log("Azure Communication Services - Job Router Quickstart")
// Quickstart code goes here
};
main().catch((error) => {
console.log("Encountered an error");
console.log(error);
})
Inicializar o cliente do Roteador de Trabalhos
Os clientes do Roteador de Trabalho podem ser autenticados usando a cadeia de conexão adquirida do recurso dos Serviços de Comunicação do Azure no portal do Azure. Geramos um cliente para interagir com o serviço Roteador de Trabalhos. Para obter mais informações sobre cadeias de conexão, consulte access-your-connection-strings-and-service-endpoints.
Adicione o seguinte código em index.js
dentro da função main
.
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] ||
"endpoint=https://<resource-name>.communication.azure.com/;<access-key>";
const client = JobRouterClient(connectionString);
Criar uma política de distribuição
O Roteador de Trabalhos usa uma política de distribuição para decidir como os trabalhadores serão notificados sobre os trabalhos disponíveis e a vida útil das notificações, conhecidas como Ofertas. Crie a política especificando a ID, um nome, um offerExpiresAfterSeconds e um modo de distribuição.
const distributionPolicy = await client.path("/routing/distributionPolicies/{distributionPolicyId}", "distribution-policy-1").patch({
body: {
offerExpiresAfterSeconds: 60,
mode: { kind: "longest-idle" },
name: "My distribution policy"
},
contentType: "application/merge-patch+json"
});
Criar uma fila
Crie a fila especificando uma ID, um nome e forneça a ID do objeto de Política de distribuição que você criou acima.
const queue = await client.path("/routing/queues/{queueId}", "queue-1").patch({
body: {
name: "My Queue",
distributionPolicyId: distributionPolicy.body.id
},
contentType: "application/merge-patch+json"
});
Enviar um trabalho
Agora, podemos enviar um trabalho diretamente para essa fila, com um seletor de trabalhador que exige que o trabalhador tenha o rótulo Some-Skill
maior que 10.
const job = await client.path("/routing/jobs/{jobId}", "job-1").patch({
body: {
channelId: "voice",
queueId: queue.body.id,
priority: 1,
requestedWorkerSelectors: [{ key: "Some-Skill", labelOperator: "greaterThan", value: 10 }]
},
contentType: "application/merge-patch+json"
});
Criar um trabalhador
Agora, criamos um trabalhador para receber trabalho dessa fila, com o rótulo Some-Skill
igual a 11 e a capacidade em my-channel
.
let worker = await client.path("/routing/workers/{workerId}", "worker-1").patch({
body: {
capacity: 1,
queues: [queue.body.id],
labels: { "Some-Skill": 11 },
channels: [{ channelId: "voice", capacityCostPerJob: 1 }],
availableForOffers: true
},
contentType: "application/merge-patch+json"
});
Receber uma oferta
Devemos obter um RouterWorkerOfferIssued da assinatura da Grade de Eventos. No entanto, também podemos aguardar alguns segundos e, em seguida, consultar o trabalhador diretamente na API do JobRouter para ver se uma oferta foi emitida para ela.
await new Promise(r => setTimeout(r, 10000));
worker = await client.path("/routing/workers/{workerId}", worker.body.id).get();
for (const offer of worker.body.offers) {
console.log(`Worker ${worker.body.id} has an active offer for job ${offer.jobId}`);
}
Aceitar a oferta de trabalho
Em seguida, o trabalhador pode aceitar a oferta de trabalho usando o SDK, que atribui o trabalho à função de trabalho.
const accept = await client.path("/routing/workers/{workerId}/offers/{offerId}:accept", worker.body.id, worker.body.offers[0].offerId).post();
console.log(`Worker ${worker.body.id} is assigned job ${accept.body.jobId}`);
Concluir o trabalho
Depois que o trabalhador tiver concluído o trabalho associado ao cargo (por exemplo, a chamada foi concluída), concluiremos o trabalho.
await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:complete", accept.body.jobId, accept.body.assignmentId).post();
console.log(`Worker ${worker.body.id} has completed job ${accept.body.jobId}`);
Fechar o trabalho
Quando o trabalhador estiver pronto para assumir novos trabalhos, o trabalhador deverá fechar o trabalho. Opcionalmente, o trabalhador pode fornecer um código de disposição para indicar o resultado do trabalho.
await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", accept.body.jobId, accept.body.assignmentId).post({
body: { dispositionCode: "Resolved" }
});
console.log(`Worker ${worker.body.id} has closed job ${accept.body.jobId}`);
Excluir o trabalho
Depois que o trabalho for fechado, poderemos excluir o trabalho para que possamos recriar o trabalho com a mesma ID se executarmos este exemplo novamente
await client.path("/routing/jobs/{jobId}", accept.body.jobId).delete();
console.log(`Deleting job ${accept.body.jobId}`);
Executar o código
Para executar o código, verifique se você está no diretório onde está o arquivo index.js
.
node index.js
Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1
Observação
Executar o aplicativo mais de uma vez fará com que um novo trabalho seja colocado na fila a cada vez. Isso pode fazer com que seja oferecido à função de trabalho um trabalho diferente daquele criado quando você executou o código acima. Como isso pode distorcer a solicitação, considere excluir os trabalhos da fila a cada vez. Veja a documentação do SDK para gerenciar uma fila ou um trabalho.
Documentação de referência
Leia sobre o conjunto completo de funcionalidades do Roteador de Trabalhos dos Serviços de Comunicação do Azure na referência do SDK do JavaScript ou na referência da API REST.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Um recurso e uma cadeia de conexão ativos dos Serviços de Comunicação. Crie um recurso dos Serviços de Comunicação.
- Python 3.7+ para o seu sistema operacional.
Código de exemplo
Você pode revisar e baixar o código de exemplo para este início rápido no GitHub.
Configurando
Criar um novo aplicativo Python
Em uma janela do console ou terminal, crie uma pasta para seu aplicativo e navegue até ela.
mkdir jobrouter-quickstart && cd jobrouter-quickstart
Instalar o pacote
Você precisará usar a biblioteca de clientes do Roteador de Trabalho de Comunicação do Azure para Python versão 1.0.0 ou superior.
No prompt de console, execute o seguinte comando:
pip install azure-communication-jobrouter
Configurar o framework de aplicativos
Crie um arquivo chamado router-quickstart.py
e adicione a estrutura básica do programa.
import time
from azure.communication.jobrouter import (
JobRouterClient,
JobRouterAdministrationClient
)
from azure.communication.jobrouter.models import (
LongestIdleMode,
RouterWorkerSelector,
LabelOperator,
RouterChannel,
CloseJobOptions
)
class RouterQuickstart(object):
print("Azure Communication Services - Job Router Quickstart")
#Job Router method implementations goes here
if __name__ == '__main__':
router = RouterQuickstart()
Inicializar o cliente do Roteador de Trabalhos e o cliente de administração
Os clientes do Roteador de Trabalho podem ser autenticados usando a cadeia de conexão adquirida do recurso dos Serviços de Comunicação do Azure no portal do Azure. Geramos um cliente e um cliente de administração para interagir com o serviço do Roteador de Trabalhos. O cliente administrador é usado para provisionar filas e políticas, enquanto o cliente é usado para enviar trabalhos e registrar funções de trabalho. Para obter mais informações sobre cadeias de conexão, consulte access-your-connection-strings-and-service-endpoints.
# Get a connection string to our Azure Communication Services resource.
router_admin_client = JobRouterAdministrationClient.from_connection_string(conn_str = "your_connection_string")
router_client = JobRouterClient.from_connection_string(conn_str = "your_connection_string")
Criar uma política de distribuição
O Roteador de Trabalho usa uma política de distribuição para decidir como os as funções de trabalho serão notificadas sobre os trabalhos disponíveis e a vida útil das notificações, conhecidas como Ofertas. Crie a política especificando o distribution_policy_id, um nome, um valor offer_expires_after_seconds e um modo de distribuição.
distribution_policy = router_admin_client.upsert_distribution_policy(
distribution_policy_id ="distribution-policy-1",
offer_expires_after_seconds = 60,
mode = LongestIdleMode(),
name = "My distribution policy")
Criar uma fila
Crie a fila especificando uma ID, um nome e forneça a ID do objeto de Política de distribuição que você criou acima.
queue = router_admin_client.upsert_queue(
queue_id = "queue-1",
name = "My Queue",
distribution_policy_id = distribution_policy.id)
Enviar um trabalho
Agora, podemos enviar um trabalho diretamente para essa fila, com um seletor de trabalhador que exige que o trabalhador tenha o rótulo Some-Skill
maior que 10.
job = router_client.upsert_job(
job_id = "job-1",
channel_id = "voice",
queue_id = queue.id,
priority = 1,
requested_worker_selectors = [
RouterWorkerSelector(
key = "Some-Skill",
label_operator = LabelOperator.GREATER_THAN,
value = 10
)
])
Criar um trabalhador
Agora, criamos um trabalhador para receber trabalho dessa fila, com o rótulo Some-Skill
igual a 11 e a capacidade em my-channel
.
worker = router_client.upsert_worker(
worker_id = "worker-1",
capacity = 1,
queues = ["queue-1"],
labels = {
"Some-Skill": 11
},
channels = [RouterChannel(channel_id = "voice", capacity_cost_per_job = 1)],
available_for_offers = True
)
Receber uma oferta
Devemos obter um RouterWorkerOfferIssued da assinatura da Grade de Eventos. No entanto, também podemos aguardar alguns segundos e, em seguida, consultar o trabalhador diretamente na API do JobRouter para ver se uma oferta foi emitida para ela.
time.sleep(10)
worker = router_client.get_worker(worker_id = worker.id)
for offer in worker.offers:
print(f"Worker {worker.id} has an active offer for job {offer.job_id}")
Aceitar a oferta de trabalho
Em seguida, o trabalhador pode aceitar a oferta de trabalho usando o SDK, que atribui o trabalho à função de trabalho.
accept = router_client.accept_job_offer(worker_id = worker.id, offer_id = worker.offers[0].offer_id)
print(f"Worker {worker.id} is assigned job {accept.job_id}")
Concluir o trabalho
Depois que o trabalhador tiver concluído o trabalho associado ao cargo (por exemplo, a chamada foi concluída), concluiremos o trabalho.
router_client.complete_job(job_id = job.id, assignment_id = accept.assignment_id)
print(f"Worker {worker.id} has completed job {accept.job_id}")
Fechar o trabalho
Quando o trabalhador estiver pronto para assumir novos trabalhos, o trabalhador deverá fechar o trabalho. Opcionalmente, o trabalhador pode fornecer um código de disposição para indicar o resultado do trabalho.
router_client.close_job(job_id = job.id, assignment_id = accept.assignment_id, options = CloseJobOptions(disposition_code = "Resolved"))
print(f"Worker {worker.id} has closed job {accept.job_id}")
Excluir o trabalho
Depois que o trabalho for fechado, poderemos excluir o trabalho para que possamos recriar o trabalho com a mesma ID se executarmos este exemplo novamente
router_client.delete_job(accept.job_id)
print(f"Deleting {accept.job_id}")
Executar o código
Para executar o código, verifique se você está no diretório onde está o arquivo router-quickstart.py
.
python router-quickstart.py
Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1
Observação
Executar o aplicativo mais de uma vez fará com que um novo trabalho seja colocado na fila a cada vez. Isso pode fazer com que seja oferecido à função de trabalho um trabalho diferente daquele criado quando você executou o código acima. Como isso pode distorcer a solicitação, considere excluir os trabalhos da fila a cada vez. Veja a documentação do SDK para gerenciar uma fila ou um trabalho.
Documentação de referência
Leia sobre o conjunto completo de funcionalidades do Roteador de Trabalhos dos Serviços de Comunicação do Azure na referência do SDK do Python ou na referência da API REST.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Um recurso e uma cadeia de conexão ativos dos Serviços de Comunicação. Crie um recurso dos Serviços de Comunicação.
- JDK (Java Development Kit) versão 8 ou superior.
- Apache Maven
Código de exemplo
Você pode revisar e baixar o código de exemplo para este início rápido no GitHub.
Configurando
Criar um aplicativo Java
Em uma janela de console, como cmd, PowerShell ou Bash, use o comando mvn
abaixo para criar um aplicativo de console com o nome router-quickstart
. Esse comando cria um projeto simples em Java do tipo "Olá, Mundo" com um arquivo de origem único: App.java.
mvn archetype:generate -DgroupId=com.communication.jobrouter.quickstart -DartifactId=jobrouter-quickstart-java -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Incluir o pacote
Você precisará usar a biblioteca de clientes do Roteador de Trabalho de Comunicação do Azure para Java versão 1.0.0 ou superior.
Incluir o arquivo da BOM
Inclua o azure-sdk-bom
ao seu projeto para assumir a dependência da versão de GA (disponibilidade geral) da biblioteca. No trecho a seguir, substitua o espaço reservado {bom_version_to_target} pelo número de versão.
Para saber mais sobre o BOM, confira o Leiame do BOM do SDK do Azure.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Depois, inclua a dependência direta na seção de dependências sem a marca de versão.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-jobrouter</artifactId>
</dependency>
</dependencies>
Incluir dependência direta
Se você quiser assumir a dependência de uma versão específica da biblioteca que não está presente no BOM, adicione a dependência direta ao seu projeto como descrito a seguir.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-jobrouter</artifactId>
<version>1.0.0</version>
</dependency>
Configurar o framework de aplicativos
Vá para o diretório /src/main/java/com/communication/quickstart e abra o arquivo App.java
. Adicione os códigos a seguir:
package com.communication.quickstart;
import com.azure.communication.jobrouter.JobRouterAdministrationClient;
import com.azure.communication.jobrouter.JobRouterAdministrationClientBuilder;
import com.azure.communication.jobrouter.JobRouterClient;
import com.azure.communication.jobrouter.JobRouterClientBuilder;
import com.azure.communication.jobrouter.*;
import com.azure.communication.jobrouter.models.*;
import java.time.Duration;
import java.util.List;
import java.util.Map;
public class App
{
public static void main(String[] args) throws IOException
{
System.out.println("Azure Communication Services - Job Router Quickstart");
// Quickstart code goes here
}
}
Inicializar o cliente do Roteador de Trabalhos e o cliente de administração
Os clientes do Roteador de Trabalho podem ser autenticados usando a cadeia de conexão adquirida do recurso dos Serviços de Comunicação do Azure no portal do Azure. Geramos um cliente e um cliente de administração para interagir com o serviço do Roteador de Trabalhos. O cliente administrador é usado para provisionar filas e políticas, enquanto o cliente é usado para enviar trabalhos e registrar funções de trabalho. Para obter mais informações sobre cadeias de conexão, consulte access-your-connection-strings-and-service-endpoints.
// Get a connection string to our Azure Communication Services resource.
JobRouterAdministrationClient routerAdminClient = new JobRouterAdministrationClientBuilder().connectionString("your_connection_string").buildClient();
JobRouterClient routerClient = new JobRouterClientBuilder().connectionString("your_connection_string").buildClient();
Criar uma política de distribuição
O Roteador de Trabalho usa uma política de distribuição para decidir como os as funções de trabalho serão notificadas sobre os trabalhos disponíveis e a vida útil das notificações, conhecidas como Ofertas. Crie a política especificando a ID, um nome, um offerExpiresAfter e um modo de distribuição.
DistributionPolicy distributionPolicy = routerAdminClient.createDistributionPolicy(
new CreateDistributionPolicyOptions("distribution-policy-1", Duration.ofMinutes(1), new LongestIdleMode())
.setName("My distribution policy"));
Criar uma fila
Crie a fila especificando uma ID, um nome e forneça a ID do objeto de Política de distribuição que você criou acima.
RouterQueue queue = routerAdminClient.createQueue(
new CreateQueueOptions("queue-1", distributionPolicy.getId()).setName("My queue")
);
Enviar um trabalho
Agora, podemos enviar um trabalho diretamente para essa fila, com um seletor de trabalhador que exige que o trabalhador tenha o rótulo Some-Skill
maior que 10.
RouterJob job = routerClient.createJob(new CreateJobOptions("job-1", "voice", queue.getId())
.setPriority(1)
.setRequestedWorkerSelectors(List.of(
new RouterWorkerSelector("Some-Skill", LabelOperator.GREATER_THAN, new RouterValue(10)))));
Criar um trabalhador
Agora, criamos um trabalhador para receber trabalho dessa fila, com o rótulo Some-Skill
igual a 11 e a capacidade em my-channel
.
RouterWorker worker = routerClient.createWorker(
new CreateWorkerOptions("worker-1", 1)
.setQueues(List.of(queue.getId()))
.setLabels(Map.of("Some-Skill", new RouterValue(11)))
.setChannels(List.of(new RouterChannel("voice", 1))));
Receber uma oferta
Devemos obter um RouterWorkerOfferIssued da assinatura da Grade de Eventos. No entanto, também podemos aguardar alguns segundos e, em seguida, consultar o trabalhador diretamente na API do JobRouter para ver se uma oferta foi emitida para ela.
Thread.sleep(10000);
worker = routerClient.getWorker(worker.getId());
for (RouterJobOffer offer : worker.getOffers()) {
System.out.printf("Worker %s has an active offer for job %s\n", worker.getId(), offer.getJobId());
}
Aceitar a oferta de trabalho
Em seguida, o trabalhador pode aceitar a oferta de trabalho usando o SDK, que atribui o trabalho à função de trabalho.
AcceptJobOfferResult accept = routerClient.acceptJobOffer(worker.getId(), worker.getOffers().get(0).getOfferId());
System.out.printf("Worker %s is assigned job %s\n", worker.getId(), accept.getJobId());
Concluir o trabalho
Depois que o trabalhador tiver concluído o trabalho associado ao cargo (por exemplo, a chamada foi concluída), concluiremos o trabalho.
routerClient.completeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has completed job %s\n", worker.getId(), accept.getJobId());
Fechar o trabalho
Quando o trabalhador estiver pronto para assumir novos trabalhos, o trabalhador deverá fechar o trabalho.
routerClient.closeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has closed job %s\n", worker.getId(), accept.getJobId());
Excluir o trabalho
Depois que o trabalho for fechado, poderemos excluir o trabalho para que possamos recriar o trabalho com a mesma ID se executarmos este exemplo novamente
routerClient.deleteJob(accept.getJobId());
System.out.printf("Deleting job %s\n", accept.getJobId());
Executar o código
Para executar o código, vá para o diretório que contém o arquivo pom.xml
e compile o programa.
mvn compile
Então, crie o pacote:
mvn package
Executar o aplicativo
mvn exec:java -Dexec.mainClass="com.communication.jobrouter.quickstart.App" -Dexec.cleanupDaemonThreads=false
A saída esperada descreve cada ação concluída:
Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1
Observação
Executar o aplicativo mais de uma vez fará com que um novo trabalho seja colocado na fila a cada vez. Isso pode fazer com que seja oferecido à função de trabalho um trabalho diferente daquele criado quando você executou o código acima. Como isso pode distorcer a solicitação, considere excluir os trabalhos da fila a cada vez. Veja a documentação do SDK para gerenciar uma fila ou um trabalho.
Documentação de referência
Leia sobre o conjunto completo de funcionalidades do Roteador de Trabalhos dos Serviços de Comunicação do Azure na referência do SDK do Java ou referência da API REST.
Próximas etapas
Explorar tutoriais de instruções do Roteador de Trabalhos