Condividi tramite


Guida introduttiva: Inviare un processo per l'accodamento e il routing

Iniziare a usare Servizi di comunicazione di Azure Router processo configurando il client, quindi configurando le funzionalità di base, ad esempio code, criteri, ruoli di lavoro e processi. Per altre informazioni sui concetti relativi al router di processo, vedere la documentazione concettuale del router del processo

Prerequisiti

Codice di esempio

È possibile esaminare e scaricare il codice di esempio per questa guida introduttiva in GitHub.

Configurazione

Creare una nuova applicazione C#

In una finestra di una console, ad esempio cmd, PowerShell o Bash, usare il comando dotnet new per creare una nuova app console con il nome JobRouterQuickstart. Questo comando crea un semplice progetto C# "Hello World" con un singolo file di origine: Program.cs.

dotnet new console -o JobRouterQuickstart

Passare alla cartella dell'app appena creata e usare il comando dotnet build per compilare l'applicazione.

cd JobRouterQuickstart
dotnet build

Installare il pacchetto

Installare la libreria client del router processo di comunicazione di Azure per .NET con NuGet:

dotnet add package Azure.Communication.JobRouter

È necessario usare la libreria client del router del processo di comunicazione di Azure per .NET versione 1.0.0 o successiva.

Aggiungere le direttive seguenti using all'inizio di Program.cs per includere gli spazi dei nomi JobRouter.

using Azure.Communication.JobRouter;

Inizializzare il client del router di processo e il client di amministrazione

I client del router di processo possono essere autenticati usando i stringa di connessione acquisiti da una risorsa Servizi di comunicazione di Azure nella portale di Azure. Viene generato sia un client che un client di amministrazione per interagire con il servizio Router processo. Il client amministratore viene usato per effettuare il provisioning di code e criteri, mentre il client viene usato per inviare processi e registrare i ruoli di lavoro. Per altre informazioni sulle stringa di connessione, vedere 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");

Creare un criterio di distribuzione

Job Router usa un criterio di distribuzione per decidere in che modo i lavoratori riceveranno una notifica dei processi disponibili e il tempo necessario per le notifiche, note come Offerte. Creare i criteri specificando l'ID, un nome, un'offertaExpiresAfter e una modalità di distribuzione.

var distributionPolicy = await routerAdminClient.CreateDistributionPolicyAsync(
    new CreateDistributionPolicyOptions(
        distributionPolicyId: "distribution-policy-1",
        offerExpiresAfter: TimeSpan.FromMinutes(1),
        mode: new LongestIdleMode())
    {
        Name = "My distribution policy"
    }
);

Crea una coda

Creare la coda specificando un ID, un nome e specificare l'ID dell'oggetto Criteri di distribuzione creato in precedenza.

var queue = await routerAdminClient.CreateQueueAsync(
    new CreateQueueOptions(queueId: "queue-1", distributionPolicyId: distributionPolicy.Value.Id)
    {
        Name = "My Queue" 
    });

Inviare un processo

È ora possibile inviare un processo direttamente a tale coda, con un selettore di lavoro che richiede che il ruolo di lavoro abbia l'etichetta Some-Skill maggiore di 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))
        }
    });

Creare un ruolo di lavoro

A questo scopo, viene creato un ruolo di lavoro per ricevere il lavoro da tale coda, con un'etichetta uguale Some-Skill a 11 e la capacità su 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
    });

Ricevere un'offerta

Si dovrebbe ottenere un RouterWorkerOfferIssued dalla sottoscrizione di Griglia di eventi. Tuttavia, è anche possibile attendere alcuni secondi e quindi eseguire una query sul ruolo di lavoro direttamente sull'API JobRouter per verificare se è stata rilasciata un'offerta.

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

Accettare l'offerta di processo

Il ruolo di lavoro può quindi accettare l'offerta di processo usando l'SDK, che assegna il processo al ruolo di lavoro.

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

Completare il processo

Dopo che il lavoratore ha completato il lavoro associato al processo (ad esempio, completato la chiamata), il processo è stato completato.

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

Chiudere il processo

Quando il lavoratore è pronto per l'esecuzione di nuovi processi, il lavoratore deve chiudere il processo. Facoltativamente, il ruolo di lavoro può fornire un codice di eliminazione per indicare il risultato del processo.

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

Eliminare il processo

Dopo aver chiuso il processo, è possibile eliminare il processo in modo da poter ricreare il processo con lo stesso ID se si esegue di nuovo questo esempio

await routerClient.DeleteJobAsync(accept.Value.JobId);
Console.WriteLine($"Deleting job {accept.Value.JobId}");

Eseguire il codice

Eseguire l'applicazione usando dotnet run e osservare i risultati.

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

Nota

L'esecuzione dell'applicazione più volte causerà l'immissione di un nuovo processo nella coda ogni volta. Ciò può causare l'offerta di un processo diverso da quello creato quando si esegue il codice precedente. Poiché questa operazione può inclinare la richiesta, considerare l'eliminazione di processi nella coda ogni volta. Per la gestione di una coda o di un processo, vedere la documentazione dell'SDK.

Documentazione di riferimento

Per informazioni sul set completo di funzionalità di Servizi di comunicazione di Azure Router processo, vedere informazioni di riferimento su .NET SDK o informazioni di riferimento sull'API REST.

Prerequisiti

Codice di esempio

È possibile esaminare e scaricare il codice di esempio per questa guida introduttiva in GitHub.

Configurazione

Creare una nuova applicazione Web

In una finestra del terminale o della console creare una nuova cartella per l'applicazione e passarvi.

mkdir acs-router-quickstart && cd acs-router-quickstart

Eseguire npm init per creare un file package.json con le impostazioni predefinite.

npm init -y

Creare un nuovo file index.js in cui si aggiungerà il codice per questa guida introduttiva.

Installare i pacchetti

È necessario usare la libreria client del router del processo di comunicazione di Azure per JavaScript versione 1.0.0 o successiva.

Usare il npm install comando per installare gli SDK di Servizi di comunicazione seguenti per JavaScript.

npm install @azure-rest/communication-job-router --save

Configurare il framework dell'app

index.js Nel file aggiungere il codice seguente. Si aggiungerà il codice per l'avvio rapido nella main funzione .

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

Inizializzare il client del router di processo

I client del router di processo possono essere autenticati usando i stringa di connessione acquisiti da una risorsa Servizi di comunicazione di Azure nella portale di Azure. Viene generato un client per interagire con il servizio Router processo. Per altre informazioni sulle stringa di connessione, vedere access-your-connection-strings-and-service-endpoints.

Aggiungere il codice seguente all'interno index.js della main funzione .

const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] ||
    "endpoint=https://<resource-name>.communication.azure.com/;<access-key>";
const client = JobRouterClient(connectionString);

Creare un criterio di distribuzione

Il router di processo usa un criterio di distribuzione per decidere in che modo i lavoratori ricevono una notifica dei processi disponibili e il tempo necessario per le notifiche, note come Offerte. Creare il criterio specificando l'ID, un nome, un'offertaExpiresAfterSeconds e una modalità di distribuzione.

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

Crea una coda

Creare la coda specificando un ID, un nome e specificare l'ID dell'oggetto Criteri di distribuzione creato in precedenza.

const queue = await client.path("/routing/queues/{queueId}", "queue-1").patch({
    body: {
        name: "My Queue",
        distributionPolicyId: distributionPolicy.body.id
    },
    contentType: "application/merge-patch+json"
});

Inviare un processo

È ora possibile inviare un processo direttamente a tale coda, con un selettore di lavoro che richiede che il ruolo di lavoro abbia l'etichetta Some-Skill maggiore di 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"
});

Creare un ruolo di lavoro

A questo scopo, viene creato un ruolo di lavoro per ricevere il lavoro da tale coda, con un'etichetta uguale Some-Skill a 11 e la capacità su 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"
});

Ricevere un'offerta

Si dovrebbe ottenere un RouterWorkerOfferIssued dalla sottoscrizione di Griglia di eventi. Tuttavia, è anche possibile attendere alcuni secondi e quindi eseguire una query sul ruolo di lavoro direttamente sull'API JobRouter per verificare se è stata rilasciata un'offerta.

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

Accettare l'offerta di processo

Il ruolo di lavoro può quindi accettare l'offerta di processo usando l'SDK, che assegna il processo al ruolo di lavoro.

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

Completare il processo

Dopo che il lavoratore ha completato il lavoro associato al processo (ad esempio, completato la chiamata), il processo è stato completato.

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

Chiudere il processo

Quando il lavoratore è pronto per l'esecuzione di nuovi processi, il lavoratore deve chiudere il processo. Facoltativamente, il ruolo di lavoro può fornire un codice di eliminazione per indicare il risultato del processo.

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

Eliminare il processo

Dopo aver chiuso il processo, è possibile eliminare il processo in modo da poter ricreare il processo con lo stesso ID se si esegue di nuovo questo esempio

await client.path("/routing/jobs/{jobId}", accept.body.jobId).delete();
console.log(`Deleting job ${accept.body.jobId}`);

Eseguire il codice

Per eseguire il codice, assicurarsi di essere nella directory in cui si trova il index.js file.

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

Nota

L'esecuzione dell'applicazione più volte causerà l'immissione di un nuovo processo nella coda ogni volta. Ciò può causare l'offerta di un processo diverso da quello creato quando si esegue il codice precedente. Poiché questa operazione può inclinare la richiesta, considerare l'eliminazione di processi nella coda ogni volta. Per la gestione di una coda o di un processo, vedere la documentazione dell'SDK.

Documentazione di riferimento

Per informazioni sul set completo di funzionalità di Servizi di comunicazione di Azure Router processo, vedere le informazioni di riferimento su JavaScript SDK o informazioni di riferimento sull'API REST.

Prerequisiti

Codice di esempio

È possibile esaminare e scaricare il codice di esempio per questa guida introduttiva in GitHub.

Configurazione

Creare una nuova applicazione Python

In una finestra del terminale o della console creare una nuova cartella per l'applicazione e passarvi.

mkdir jobrouter-quickstart && cd jobrouter-quickstart

Installare il pacchetto

Sarà necessario usare la libreria client del router del processo di comunicazione di Azure per Python versione 1.0.0 o successiva.

Da un prompt della console eseguire il comando seguente:

pip install azure-communication-jobrouter

Configurare il framework dell'app

Creare un nuovo file denominato router-quickstart.py e aggiungere la struttura del programma di base.

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

Inizializzare il client del router di processo e il client di amministrazione

I client del router di processo possono essere autenticati usando i stringa di connessione acquisiti da una risorsa Servizi di comunicazione di Azure nella portale di Azure. Viene generato sia un client che un client di amministrazione per interagire con il servizio Router processo. Il client amministratore viene usato per effettuare il provisioning di code e criteri, mentre il client viene usato per inviare processi e registrare i ruoli di lavoro. Per altre informazioni sulle stringa di connessione, vedere 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")

Creare un criterio di distribuzione

Job Router usa un criterio di distribuzione per decidere in che modo i lavoratori riceveranno una notifica dei processi disponibili e il tempo necessario per le notifiche, note come Offerte. Creare i criteri specificando il distribution_policy_id, un nome, un valore offer_expires_after_seconds e una modalità di distribuzione.

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

Crea una coda

Creare la coda specificando un ID, un nome e specificare l'ID dell'oggetto Criteri di distribuzione creato in precedenza.

queue = router_admin_client.upsert_queue(
    queue_id = "queue-1",
    name = "My Queue",
    distribution_policy_id = distribution_policy.id)

Inviare un processo

È ora possibile inviare un processo direttamente a tale coda, con un selettore di lavoro che richiede che il ruolo di lavoro abbia l'etichetta Some-Skill maggiore di 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
        )
    ])

Creare un ruolo di lavoro

A questo scopo, viene creato un ruolo di lavoro per ricevere il lavoro da tale coda, con un'etichetta uguale Some-Skill a 11 e la capacità su 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
)

Ricevere un'offerta

Si dovrebbe ottenere un RouterWorkerOfferIssued dalla sottoscrizione di Griglia di eventi. Tuttavia, è anche possibile attendere alcuni secondi e quindi eseguire una query sul ruolo di lavoro direttamente sull'API JobRouter per verificare se è stata rilasciata un'offerta.

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}")

Accettare l'offerta di processo

Il ruolo di lavoro può quindi accettare l'offerta di processo usando l'SDK, che assegna il processo al ruolo di lavoro.

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}")

Completare il processo

Dopo che il lavoratore ha completato il lavoro associato al processo (ad esempio, completato la chiamata), il processo è stato completato.

router_client.complete_job(job_id = job.id, assignment_id = accept.assignment_id)
print(f"Worker {worker.id} has completed job {accept.job_id}")

Chiudere il processo

Quando il lavoratore è pronto per l'esecuzione di nuovi processi, il lavoratore deve chiudere il processo. Facoltativamente, il ruolo di lavoro può fornire un codice di eliminazione per indicare il risultato del processo.

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}")

Eliminare il processo

Dopo aver chiuso il processo, è possibile eliminare il processo in modo da poter ricreare il processo con lo stesso ID se si esegue di nuovo questo esempio

router_client.delete_job(accept.job_id)
print(f"Deleting {accept.job_id}")

Eseguire il codice

Per eseguire il codice, assicurarsi di essere nella directory in cui si trova il router-quickstart.py file.

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

Nota

L'esecuzione dell'applicazione più volte causerà l'immissione di un nuovo processo nella coda ogni volta. Ciò può causare l'offerta di un processo diverso da quello creato quando si esegue il codice precedente. Poiché questa operazione può inclinare la richiesta, considerare l'eliminazione di processi nella coda ogni volta. Per la gestione di una coda o di un processo, vedere la documentazione dell'SDK.

Documentazione di riferimento

Per informazioni sul set completo di funzionalità di Servizi di comunicazione di Azure Router processo, vedere le informazioni di riferimento su Python SDK o informazioni di riferimento sull'API REST.

Prerequisiti

Codice di esempio

È possibile esaminare e scaricare il codice di esempio per questa guida introduttiva in GitHub.

Configurazione

Creare una nuova applicazione Java

In una finestra della console ,ad esempio cmd, PowerShell o Bash, usare il mvn comando seguente per creare una nuova app console con il nome router-quickstart. Questo comando crea un semplice progetto Java "Hello World" con un singolo file di origine: App.java.

mvn archetype:generate -DgroupId=com.communication.jobrouter.quickstart -DartifactId=jobrouter-quickstart-java -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Includere il pacchetto

Sarà necessario usare la libreria client del router del processo di comunicazione di Azure per Java versione 1.0.0 o successiva.

Includere il file bom

Includere per azure-sdk-bom il progetto la dipendenza dalla versione disponibile a livello generale della libreria. Nel frammento di codice seguente sostituire il segnaposto {bom_version_to_target} con il numero di versione. Per altre informazioni sulla distinta base, vedere il file leggimi bom di Azure SDK.

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

e quindi includere la dipendenza diretta nella sezione dipendenze senza il tag di versione.

<dependencies>
  <dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-jobrouter</artifactId>
  </dependency>
</dependencies>

Includi dipendenza diretta

Se si vuole dipendere da una determinata versione della libreria che non è presente nella distinta base, aggiungere la dipendenza diretta al progetto come indicato di seguito.

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-communication-jobrouter</artifactId>
  <version>1.0.0</version>
</dependency>

Configurare il framework app

Passare alla directory /src/main/java/com/communication/quickstart e aprire il App.java file. Aggiungere il codice seguente:

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
    }
}

Inizializzare il client del router di processo e il client di amministrazione

I client del router di processo possono essere autenticati usando i stringa di connessione acquisiti da una risorsa Servizi di comunicazione di Azure nella portale di Azure. Viene generato sia un client che un client di amministrazione per interagire con il servizio Router processo. Il client amministratore viene usato per effettuare il provisioning di code e criteri, mentre il client viene usato per inviare processi e registrare i ruoli di lavoro. Per altre informazioni sulle stringa di connessione, vedere 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();

Creare un criterio di distribuzione

Job Router usa un criterio di distribuzione per decidere in che modo i lavoratori riceveranno una notifica dei processi disponibili e il tempo necessario per le notifiche, note come Offerte. Creare i criteri specificando l'ID, un nome, un'offertaExpiresAfter e una modalità di distribuzione.

DistributionPolicy distributionPolicy = routerAdminClient.createDistributionPolicy(
    new CreateDistributionPolicyOptions("distribution-policy-1", Duration.ofMinutes(1), new LongestIdleMode())
        .setName("My distribution policy"));

Crea una coda

Creare la coda specificando un ID, un nome e specificare l'ID dell'oggetto Criteri di distribuzione creato in precedenza.

RouterQueue queue = routerAdminClient.createQueue(
    new CreateQueueOptions("queue-1", distributionPolicy.getId()).setName("My queue")
);

Inviare un processo

È ora possibile inviare un processo direttamente a tale coda, con un selettore di lavoro che richiede che il ruolo di lavoro abbia l'etichetta Some-Skill maggiore di 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)))));

Creare un ruolo di lavoro

A questo scopo, viene creato un ruolo di lavoro per ricevere il lavoro da tale coda, con un'etichetta uguale Some-Skill a 11 e la capacità su 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))));

Ricevere un'offerta

Si dovrebbe ottenere un RouterWorkerOfferIssued dalla sottoscrizione di Griglia di eventi. Tuttavia, è anche possibile attendere alcuni secondi e quindi eseguire una query sul ruolo di lavoro direttamente sull'API JobRouter per verificare se è stata rilasciata un'offerta.

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

Accettare l'offerta di processo

Il ruolo di lavoro può quindi accettare l'offerta di processo usando l'SDK, che assegna il processo al ruolo di lavoro.

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

Completare il processo

Dopo che il lavoratore ha completato il lavoro associato al processo (ad esempio, completato la chiamata), il processo è stato completato.

routerClient.completeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has completed job %s\n", worker.getId(), accept.getJobId());

Chiudere il processo

Quando il lavoratore è pronto per l'esecuzione di nuovi processi, il lavoratore deve chiudere il processo.

routerClient.closeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has closed job %s\n", worker.getId(), accept.getJobId());

Eliminare il processo

Dopo aver chiuso il processo, è possibile eliminare il processo in modo da poter ricreare il processo con lo stesso ID se si esegue di nuovo questo esempio

routerClient.deleteJob(accept.getJobId());
System.out.printf("Deleting job %s\n", accept.getJobId());

Eseguire il codice

Per eseguire il codice, passare alla directory contenente il pom.xml file e compilare il programma.

mvn compile

Compilare quindi il pacchetto:

mvn package

Eseguire l'app

mvn exec:java -Dexec.mainClass="com.communication.jobrouter.quickstart.App" -Dexec.cleanupDaemonThreads=false

L'output previsto descrive ogni azione completata:

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

Nota

L'esecuzione dell'applicazione più volte causerà l'immissione di un nuovo processo nella coda ogni volta. Ciò può causare l'offerta di un processo diverso da quello creato quando si esegue il codice precedente. Poiché questa operazione può inclinare la richiesta, considerare l'eliminazione di processi nella coda ogni volta. Per la gestione di una coda o di un processo, vedere la documentazione dell'SDK.

Documentazione di riferimento

Per informazioni sul set completo di funzionalità di Servizi di comunicazione di Azure Router processo, vedere le informazioni di riferimento su Java SDK o informazioni di riferimento sull'API REST.

Passaggi successivi

Esplorare le esercitazioni sulle procedure del router di processo