Szybki start: przesyłanie zadania do kolejkowania i routingu
Rozpocznij pracę z routerem zadań usług Azure Communication Services, konfigurując klienta, a następnie konfigurując podstawowe funkcje, takie jak kolejki, zasady, procesy robocze i zadania. Aby dowiedzieć się więcej na temat pojęć dotyczących routera zadań, odwiedź dokumentację koncepcyjną routera zadań
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Aktywny zasób usług komunikacyjnych i parametry połączenia. Utwórz zasób usług komunikacyjnych.
- Najnowsza wersja biblioteki klienta .NET dla systemu operacyjnego.
Przykładowy kod
Możesz przejrzeć i pobrać przykładowy kod dla tego przewodnika Szybki start w witrynie GitHub.
Konfigurowanie
Tworzenie nowej aplikacji w języku C#
W oknie konsoli (takim jak cmd, PowerShell lub Bash) użyj dotnet new
polecenia , aby utworzyć nową aplikację konsolową o nazwie JobRouterQuickstart
. To polecenie tworzy prosty projekt języka C# "Hello World" z jednym plikiem źródłowym: Program.cs.
dotnet new console -o JobRouterQuickstart
Zmień katalog na nowo utworzony folder aplikacji i użyj dotnet build
polecenia , aby skompilować aplikację.
cd JobRouterQuickstart
dotnet build
Instalowanie pakietu
Zainstaluj bibliotekę klienta routera zadań komunikacji platformy Azure dla platformy .NET za pomocą narzędzia NuGet:
dotnet add package Azure.Communication.JobRouter
Należy użyć biblioteki klienta routera zadań komunikacji platformy Azure dla platformy .NET w wersji 1.0.0 lub nowszej.
Dodaj następujące using
dyrektywy na początku Program.cs , aby uwzględnić przestrzenie nazw JobRouter.
using Azure.Communication.JobRouter;
Inicjowanie klienta routera zadań i klienta administracyjnego
Klienci routera zadań mogą być uwierzytelniani przy użyciu parametry połączenia pozyskanych z zasobu usług Azure Communication Services w witrynie Azure Portal. Generujemy zarówno klienta, jak i klienta administracyjnego w celu interakcji z usługą Router zadań. Klient administracyjny służy do aprowizowania kolejek i zasad, podczas gdy klient jest używany do przesyłania zadań i rejestrowania procesów roboczych. Aby uzyskać więcej informacji na temat parametry połączenia, zobacz 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");
Tworzenie zasad dystrybucji
Router zadań używa zasad dystrybucji, aby zdecydować, w jaki sposób pracownicy będą powiadamiani o dostępnych zadaniach i czasie wygaśnięcia powiadomień, nazywanych ofertami. Utwórz zasady, określając identyfikator, nazwę, ofertęExpiresAfter i tryb dystrybucji.
var distributionPolicy = await routerAdminClient.CreateDistributionPolicyAsync(
new CreateDistributionPolicyOptions(
distributionPolicyId: "distribution-policy-1",
offerExpiresAfter: TimeSpan.FromMinutes(1),
mode: new LongestIdleMode())
{
Name = "My distribution policy"
}
);
Utwórz kolejkę
Utwórz kolejkę, określając identyfikator, nazwę i podaj identyfikator obiektu zasad dystrybucji utworzony powyżej.
var queue = await routerAdminClient.CreateQueueAsync(
new CreateQueueOptions(queueId: "queue-1", distributionPolicyId: distributionPolicy.Value.Id)
{
Name = "My Queue"
});
Przesyłanie zadania
Teraz możemy przesłać zadanie bezpośrednio do tej kolejki z selektorem procesu roboczego, który wymaga, aby pracownik miał etykietę Some-Skill
większą niż 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))
}
});
Tworzenie procesu roboczego
Teraz utworzymy proces roboczy do odbierania pracy z tej kolejki z etykietą Some-Skill
równą 11 i pojemnością na .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
});
Otrzymywanie oferty
Powinniśmy uzyskać routerWorkerOfferIssued z naszej subskrypcji usługi Event Grid. Możemy jednak również poczekać kilka sekund, a następnie wysłać zapytanie do procesu roboczego bezpośrednio względem interfejsu API JobRouter, aby sprawdzić, czy oferta została mu wydana.
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}");
}
Zaakceptuj ofertę zadania
Następnie proces roboczy może zaakceptować ofertę zadania przy użyciu zestawu SDK, który przypisuje zadanie do procesu roboczego.
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}");
Ukończenie zadania
Po zakończeniu pracy skojarzonej z zadaniem (na przykład zakończeniu połączenia proces roboczy) wykonamy zadanie.
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}");
Zamykanie zadania
Gdy proces roboczy będzie gotowy do podjęcia nowych zadań, pracownik powinien zamknąć zadanie. Opcjonalnie proces roboczy może dostarczyć kod dyspozycji, aby wskazać wynik zadania.
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}");
Usuwanie zadania
Po zamknięciu zadania możemy usunąć zadanie, aby umożliwić ponowne utworzenie zadania przy użyciu tego samego identyfikatora, jeśli uruchomimy ponownie ten przykład
await routerClient.DeleteJobAsync(accept.Value.JobId);
Console.WriteLine($"Deleting job {accept.Value.JobId}");
Uruchamianie kodu
Uruchom aplikację przy użyciu polecenia dotnet run
i obserwuj wyniki.
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
Uwaga
Uruchomienie aplikacji więcej niż raz spowoduje umieszczenie nowego zadania w kolejce za każdym razem. Może to spowodować, że proces roboczy będzie oferować zadanie inne niż utworzone podczas uruchamiania powyższego kodu. Ponieważ może to wypaczyć żądanie, rozważając usunięcie zadań w kolejce za każdym razem. Zapoznaj się z dokumentacją zestawu SDK dotyczącą zarządzania kolejką lub zadaniem.
Dokumentacja referencyjna
Przeczytaj o pełnym zestawie możliwości routera zadań usług Azure Communication Services z dokumentacji zestawu SDK platformy .NET lub dokumentacji interfejsu API REST.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Aktywny zasób usług komunikacyjnych i parametry połączenia. Utwórz zasób usług komunikacyjnych.
- Najnowsze wersje programu Node.js Active LTS i Maintenance LTS.
Przykładowy kod
Możesz przejrzeć i pobrać przykładowy kod dla tego przewodnika Szybki start w witrynie GitHub.
Konfigurowanie
Tworzenie nowej aplikacji internetowej
W oknie terminalu lub konsoli utwórz nowy folder dla aplikacji i przejdź do niego.
mkdir acs-router-quickstart && cd acs-router-quickstart
Uruchom polecenie npm init
, aby utworzyć plik package.json z ustawieniami domyślnymi.
npm init -y
Utwórz nowy plik index.js
, w którym dodasz kod dla tego przewodnika Szybki start.
Instalowanie pakietów
Należy użyć biblioteki klienta routera zadań komunikacji platformy Azure dla języka JavaScript w wersji 1.0.0 lub nowszej.
Użyj polecenia , npm install
aby zainstalować poniższe zestawy SDK usług Communication Services dla języka JavaScript.
npm install @azure-rest/communication-job-router --save
Konfigurowanie struktury aplikacji
index.js
W pliku dodaj następujący kod. Dodamy kod dla przewodnika Szybki start w main
funkcji .
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);
})
Inicjowanie klienta routera zadań
Klienci routera zadań mogą być uwierzytelniani przy użyciu parametry połączenia pozyskanych z zasobu usług Azure Communication Services w witrynie Azure Portal. Generujemy klienta do interakcji z usługą Router zadań. Aby uzyskać więcej informacji na temat parametry połączenia, zobacz access-your-connection-strings-and-service-endpoints.
Dodaj następujący kod wewnątrz index.js
main
funkcji.
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] ||
"endpoint=https://<resource-name>.communication.azure.com/;<access-key>";
const client = JobRouterClient(connectionString);
Tworzenie zasad dystrybucji
Router zadań używa zasad dystrybucji, aby zdecydować, w jaki sposób pracownicy są powiadamiani o dostępnych zadaniach i czasie wygaśnięcia powiadomień, nazywanych ofertami. Utwórz zasady, określając identyfikator, nazwę, ofertęExpiresAfterSeconds i tryb dystrybucji.
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"
});
Utwórz kolejkę
Utwórz kolejkę, określając identyfikator, nazwę i podaj identyfikator obiektu zasad dystrybucji utworzony powyżej.
const queue = await client.path("/routing/queues/{queueId}", "queue-1").patch({
body: {
name: "My Queue",
distributionPolicyId: distributionPolicy.body.id
},
contentType: "application/merge-patch+json"
});
Przesyłanie zadania
Teraz możemy przesłać zadanie bezpośrednio do tej kolejki z selektorem procesu roboczego, który wymaga, aby pracownik miał etykietę Some-Skill
większą niż 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"
});
Tworzenie procesu roboczego
Teraz utworzymy proces roboczy do odbierania pracy z tej kolejki z etykietą Some-Skill
równą 11 i pojemnością na .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"
});
Otrzymywanie oferty
Powinniśmy uzyskać routerWorkerOfferIssued z naszej subskrypcji usługi Event Grid. Możemy jednak również poczekać kilka sekund, a następnie wysłać zapytanie do procesu roboczego bezpośrednio względem interfejsu API JobRouter, aby sprawdzić, czy oferta została mu wydana.
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}`);
}
Zaakceptuj ofertę zadania
Następnie proces roboczy może zaakceptować ofertę zadania przy użyciu zestawu SDK, który przypisuje zadanie do procesu roboczego.
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}`);
Ukończenie zadania
Po zakończeniu pracy skojarzonej z zadaniem (na przykład zakończeniu połączenia proces roboczy) wykonamy zadanie.
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}`);
Zamykanie zadania
Gdy proces roboczy będzie gotowy do podjęcia nowych zadań, pracownik powinien zamknąć zadanie. Opcjonalnie proces roboczy może dostarczyć kod dyspozycji, aby wskazać wynik zadania.
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}`);
Usuwanie zadania
Po zamknięciu zadania możemy usunąć zadanie, aby umożliwić ponowne utworzenie zadania przy użyciu tego samego identyfikatora, jeśli uruchomimy ponownie ten przykład
await client.path("/routing/jobs/{jobId}", accept.body.jobId).delete();
console.log(`Deleting job ${accept.body.jobId}`);
Uruchamianie kodu
Aby uruchomić kod, upewnij się, że znajdujesz się w katalogu, w którym index.js
znajduje się plik.
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
Uwaga
Uruchomienie aplikacji więcej niż raz spowoduje umieszczenie nowego zadania w kolejce za każdym razem. Może to spowodować, że proces roboczy będzie oferować zadanie inne niż utworzone podczas uruchamiania powyższego kodu. Ponieważ może to wypaczyć żądanie, rozważając usunięcie zadań w kolejce za każdym razem. Zapoznaj się z dokumentacją zestawu SDK dotyczącą zarządzania kolejką lub zadaniem.
Dokumentacja referencyjna
Zapoznaj się z pełnym zestawem możliwości routera zadań usług Azure Communication Services z dokumentacji zestawu SDK języka JavaScript lub dokumentacji interfejsu API REST.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Aktywny zasób usług komunikacyjnych i parametry połączenia. Utwórz zasób usług komunikacyjnych.
- Środowisko Python w wersji 3.7 lub nowszej dla systemu operacyjnego.
Przykładowy kod
Możesz przejrzeć i pobrać przykładowy kod dla tego przewodnika Szybki start w witrynie GitHub.
Konfigurowanie
Tworzenie nowej aplikacji w języku Python
W oknie terminalu lub konsoli utwórz nowy folder dla aplikacji i przejdź do niego.
mkdir jobrouter-quickstart && cd jobrouter-quickstart
Instalowanie pakietu
Należy użyć biblioteki klienta routera zadań komunikacji platformy Azure dla języka Python w wersji 1.0.0 lub nowszej.
W wierszu polecenia konsoli wykonaj następujące polecenie:
pip install azure-communication-jobrouter
Konfigurowanie struktury aplikacji
Utwórz nowy plik o nazwie router-quickstart.py
i dodaj podstawową strukturę programu.
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()
Inicjowanie klienta routera zadań i klienta administracyjnego
Klienci routera zadań mogą być uwierzytelniani przy użyciu parametry połączenia pozyskanych z zasobu usług Azure Communication Services w witrynie Azure Portal. Generujemy zarówno klienta, jak i klienta administracyjnego w celu interakcji z usługą Router zadań. Klient administracyjny służy do aprowizowania kolejek i zasad, podczas gdy klient jest używany do przesyłania zadań i rejestrowania procesów roboczych. Aby uzyskać więcej informacji na temat parametry połączenia, zobacz 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")
Tworzenie zasad dystrybucji
Router zadań używa zasad dystrybucji, aby zdecydować, w jaki sposób pracownicy będą powiadamiani o dostępnych zadaniach i czasie wygaśnięcia powiadomień, nazywanych ofertami. Utwórz zasady, określając distribution_policy_id, nazwę, wartość offer_expires_after_seconds i tryb dystrybucji.
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")
Utwórz kolejkę
Utwórz kolejkę, określając identyfikator, nazwę i podaj identyfikator obiektu zasad dystrybucji utworzony powyżej.
queue = router_admin_client.upsert_queue(
queue_id = "queue-1",
name = "My Queue",
distribution_policy_id = distribution_policy.id)
Przesyłanie zadania
Teraz możemy przesłać zadanie bezpośrednio do tej kolejki z selektorem procesu roboczego, który wymaga, aby pracownik miał etykietę Some-Skill
większą niż 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
)
])
Tworzenie procesu roboczego
Teraz utworzymy proces roboczy do odbierania pracy z tej kolejki z etykietą Some-Skill
równą 11 i pojemnością na .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
)
Otrzymywanie oferty
Powinniśmy uzyskać routerWorkerOfferIssued z naszej subskrypcji usługi Event Grid. Możemy jednak również poczekać kilka sekund, a następnie wysłać zapytanie do procesu roboczego bezpośrednio względem interfejsu API JobRouter, aby sprawdzić, czy oferta została mu wydana.
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}")
Zaakceptuj ofertę zadania
Następnie proces roboczy może zaakceptować ofertę zadania przy użyciu zestawu SDK, który przypisuje zadanie do procesu roboczego.
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}")
Ukończenie zadania
Po zakończeniu pracy skojarzonej z zadaniem (na przykład zakończeniu połączenia proces roboczy) wykonamy zadanie.
router_client.complete_job(job_id = job.id, assignment_id = accept.assignment_id)
print(f"Worker {worker.id} has completed job {accept.job_id}")
Zamykanie zadania
Gdy proces roboczy będzie gotowy do podjęcia nowych zadań, pracownik powinien zamknąć zadanie. Opcjonalnie proces roboczy może dostarczyć kod dyspozycji, aby wskazać wynik zadania.
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}")
Usuwanie zadania
Po zamknięciu zadania możemy usunąć zadanie, aby umożliwić ponowne utworzenie zadania przy użyciu tego samego identyfikatora, jeśli uruchomimy ponownie ten przykład
router_client.delete_job(accept.job_id)
print(f"Deleting {accept.job_id}")
Uruchamianie kodu
Aby uruchomić kod, upewnij się, że znajdujesz się w katalogu, w którym router-quickstart.py
znajduje się plik.
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
Uwaga
Uruchomienie aplikacji więcej niż raz spowoduje umieszczenie nowego zadania w kolejce za każdym razem. Może to spowodować, że proces roboczy będzie oferować zadanie inne niż utworzone podczas uruchamiania powyższego kodu. Ponieważ może to wypaczyć żądanie, rozważając usunięcie zadań w kolejce za każdym razem. Zapoznaj się z dokumentacją zestawu SDK dotyczącą zarządzania kolejką lub zadaniem.
Dokumentacja referencyjna
Przeczytaj o pełnym zestawie możliwości routera zadań usług Azure Communication Services z dokumentacji zestawu SDK języka Python lub dokumentacji interfejsu API REST.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Aktywny zasób usług komunikacyjnych i parametry połączenia. Utwórz zasób usług komunikacyjnych.
- Zestaw Java Development Kit (JDK) w wersji 8 lub nowszej.
- Apache Maven
Przykładowy kod
Możesz przejrzeć i pobrać przykładowy kod dla tego przewodnika Szybki start w witrynie GitHub.
Konfigurowanie
Tworzenie nowej aplikacji Java
W oknie konsoli (takim jak cmd, PowerShell lub Bash) użyj poniższego mvn
polecenia, aby utworzyć nową aplikację konsolową o nazwie router-quickstart
. To polecenie tworzy prosty projekt Java "Hello World" z jednym plikiem źródłowym: App.java.
mvn archetype:generate -DgroupId=com.communication.jobrouter.quickstart -DartifactId=jobrouter-quickstart-java -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Uwzględnij pakiet
Należy użyć biblioteki klienta routera zadań komunikacji platformy Azure dla języka Java w wersji 1.0.0 lub nowszej.
Uwzględnij plik BOM
Dołącz element azure-sdk-bom
do projektu, aby mieć zależność od wersji ogólnie dostępnej biblioteki. W poniższym fragmencie kodu zastąp symbol zastępczy {bom_version_to_target} numerem wersji.
Aby dowiedzieć się więcej na temat modelu BOM, zobacz plik readme zestawu Azure SDK BOM.
<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>
a następnie uwzględnij bezpośrednią zależność w sekcji zależności bez tagu wersji.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-jobrouter</artifactId>
</dependency>
</dependencies>
Uwzględnij zależność bezpośrednią
Jeśli chcesz podjąć zależność od określonej wersji biblioteki, która nie znajduje się w modelu BOM, dodaj bezpośrednią zależność do projektu w następujący sposób.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-jobrouter</artifactId>
<version>1.0.0</version>
</dependency>
Konfigurowanie platformy aplikacji
Przejdź do katalogu /src/main/java/com/communication/quickstart i otwórz App.java
plik. Dodaj następujący kod:
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
}
}
Inicjowanie klienta routera zadań i klienta administracyjnego
Klienci routera zadań mogą być uwierzytelniani przy użyciu parametry połączenia pozyskanych z zasobu usług Azure Communication Services w witrynie Azure Portal. Generujemy zarówno klienta, jak i klienta administracyjnego w celu interakcji z usługą Router zadań. Klient administracyjny służy do aprowizowania kolejek i zasad, podczas gdy klient jest używany do przesyłania zadań i rejestrowania procesów roboczych. Aby uzyskać więcej informacji na temat parametry połączenia, zobacz 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();
Tworzenie zasad dystrybucji
Router zadań używa zasad dystrybucji, aby zdecydować, w jaki sposób pracownicy będą powiadamiani o dostępnych zadaniach i czasie wygaśnięcia powiadomień, nazywanych ofertami. Utwórz zasady, określając identyfikator, nazwę, ofertęExpiresAfter i tryb dystrybucji.
DistributionPolicy distributionPolicy = routerAdminClient.createDistributionPolicy(
new CreateDistributionPolicyOptions("distribution-policy-1", Duration.ofMinutes(1), new LongestIdleMode())
.setName("My distribution policy"));
Utwórz kolejkę
Utwórz kolejkę, określając identyfikator, nazwę i podaj identyfikator obiektu zasad dystrybucji utworzony powyżej.
RouterQueue queue = routerAdminClient.createQueue(
new CreateQueueOptions("queue-1", distributionPolicy.getId()).setName("My queue")
);
Przesyłanie zadania
Teraz możemy przesłać zadanie bezpośrednio do tej kolejki z selektorem procesu roboczego, który wymaga, aby pracownik miał etykietę Some-Skill
większą niż 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)))));
Tworzenie procesu roboczego
Teraz utworzymy proces roboczy do odbierania pracy z tej kolejki z etykietą Some-Skill
równą 11 i pojemnością na .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))));
Otrzymywanie oferty
Powinniśmy uzyskać routerWorkerOfferIssued z naszej subskrypcji usługi Event Grid. Możemy jednak również poczekać kilka sekund, a następnie wysłać zapytanie do procesu roboczego bezpośrednio względem interfejsu API JobRouter, aby sprawdzić, czy oferta została mu wydana.
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());
}
Zaakceptuj ofertę zadania
Następnie proces roboczy może zaakceptować ofertę zadania przy użyciu zestawu SDK, który przypisuje zadanie do procesu roboczego.
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());
Ukończenie zadania
Po zakończeniu pracy skojarzonej z zadaniem (na przykład zakończeniu połączenia proces roboczy) wykonamy zadanie.
routerClient.completeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has completed job %s\n", worker.getId(), accept.getJobId());
Zamykanie zadania
Gdy proces roboczy będzie gotowy do podjęcia nowych zadań, pracownik powinien zamknąć zadanie.
routerClient.closeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has closed job %s\n", worker.getId(), accept.getJobId());
Usuwanie zadania
Po zamknięciu zadania możemy usunąć zadanie, aby umożliwić ponowne utworzenie zadania przy użyciu tego samego identyfikatora, jeśli uruchomimy ponownie ten przykład
routerClient.deleteJob(accept.getJobId());
System.out.printf("Deleting job %s\n", accept.getJobId());
Uruchamianie kodu
Aby uruchomić kod, przejdź do katalogu zawierającego pom.xml
plik i skompiluj program.
mvn compile
Następnie skompiluj pakiet:
mvn package
Wykonywanie aplikacji
mvn exec:java -Dexec.mainClass="com.communication.jobrouter.quickstart.App" -Dexec.cleanupDaemonThreads=false
Oczekiwane dane wyjściowe opisują każdą ukończoną akcję:
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
Uwaga
Uruchomienie aplikacji więcej niż raz spowoduje umieszczenie nowego zadania w kolejce za każdym razem. Może to spowodować, że proces roboczy będzie oferować zadanie inne niż utworzone podczas uruchamiania powyższego kodu. Ponieważ może to wypaczyć żądanie, rozważając usunięcie zadań w kolejce za każdym razem. Zapoznaj się z dokumentacją zestawu SDK dotyczącą zarządzania kolejką lub zadaniem.
Dokumentacja referencyjna
Zapoznaj się z pełnym zestawem możliwości routera zadań usług Azure Communication Services z dokumentacji zestawu JAVA SDK lub dokumentacji interfejsu API REST.
Następne kroki
Zapoznaj się z samouczkami z instrukcjami dotyczącymi routera zadań