Rychlý start: Odeslání úlohy pro řazení do fronty a směrování
Začněte se směrovačem úloh Azure Communication Services tím, že nastavíte klienta a nakonfigurujete základní funkce, jako jsou fronty, zásady, pracovní procesy a úlohy. Další informace o konceptech směrovače úloh najdete v koncepční dokumentaci ke směrovači úloh.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Aktivní prostředek služby Communication Services a připojovací řetězec. Vytvořte prostředek komunikační služby.
- Nejnovější verze klientské knihovny .NET pro váš operační systém.
Ukázkový kód
Ukázkový kód pro tento rychlý start si můžete prohlédnout a stáhnout na GitHubu.
Nastavení
Vytvoření nové aplikace jazyka C#
V okně konzoly (například cmd, PowerShell nebo Bash) pomocí dotnet new
příkazu vytvořte novou konzolovou aplikaci s názvem JobRouterQuickstart
. Tento příkaz vytvoří jednoduchý projekt "Hello World" C# s jedním zdrojovým souborem: Program.cs.
dotnet new console -o JobRouterQuickstart
Změňte adresář na nově vytvořenou složku aplikace a pomocí dotnet build
příkazu zkompilujte aplikaci.
cd JobRouterQuickstart
dotnet build
Nainstalujte balíček .
Nainstalujte klientskou knihovnu směrovačů komunikačních úloh Azure pro .NET pomocí NuGetu:
dotnet add package Azure.Communication.JobRouter
Pro .NET verze 1.0.0 nebo vyšší budete muset použít klientskou knihovnu směrovačů úloh Azure Communication Job Router.
Do horní části Program.cs přidejte následující using
direktivy, které budou zahrnovat obory názvů JobRouter.
using Azure.Communication.JobRouter;
Inicializace klienta směrovače úloh a klienta správy
Klienti směrovače úloh se dají ověřit pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Pro interakci se službou Směrovač úloh vygenerujeme klienta i klienta pro správu. Klient pro správu se používá ke zřizování front a zásad, zatímco klient se používá k odesílání úloh a registraci pracovních procesů. Další informace o připojovací řetězec najdete v tématu 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");
Vytvoření zásady distribuce
Směrovač úloh pomocí distribučních zásad rozhoduje o tom, jak budou pracovníci upozorněni na dostupné úlohy a čas, kdy se budou zobrazovat oznámení, označovaná jako Nabídky. Vytvořte zásadu zadáním ID, názvu, nabídkyExpiresAfter a distribučního režimu.
var distributionPolicy = await routerAdminClient.CreateDistributionPolicyAsync(
new CreateDistributionPolicyOptions(
distributionPolicyId: "distribution-policy-1",
offerExpiresAfter: TimeSpan.FromMinutes(1),
mode: new LongestIdleMode())
{
Name = "My distribution policy"
}
);
Vytvořit frontu
Vytvořte frontu zadáním ID, názvu a zadání ID objektu zásad distribuce, které jste vytvořili výše.
var queue = await routerAdminClient.CreateQueueAsync(
new CreateQueueOptions(queueId: "queue-1", distributionPolicyId: distributionPolicy.Value.Id)
{
Name = "My Queue"
});
Odeslání úlohy
Teď můžeme odeslat úlohu přímo do této fronty s selektorem pracovního procesu, který vyžaduje, aby pracovní proces měl popisek Some-Skill
větší než 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))
}
});
Vytvoření pracovního procesu
Teď vytvoříme pracovní proces pro příjem práce z této fronty s popiskem Some-Skill
rovnajícím se 11 a kapacitě 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
});
Přijetí nabídky
Měli bychom získat RouterWorkerOfferIssud z odběru Event Gridu. Mohli bychom ale také několik sekund počkat a pak dotazovat pracovníka přímo na rozhraní JOBRouter API, abychom zjistili, jestli byla pro něj vydána nabídka.
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}");
}
Přijetí nabídky úloh
Potom může pracovní proces přijmout nabídku úlohy pomocí sady SDK, která tuto úlohu přiřadí pracovnímu procesu.
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}");
Dokončení úlohy
Jakmile pracovní proces dokončí práci přidruženou k úloze (například dokončil hovor), dokončíme úlohu.
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}");
Zavření úlohy
Jakmile je pracovní proces připravený k převzetí nových úloh, měl by pracovní proces úlohu zavřít. Volitelně může pracovník poskytnout kód dispozice, který bude indikovat výsledek úlohy.
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}");
Odstranění úlohy
Po zavření úlohy můžeme úlohu odstranit, abychom mohli znovu vytvořit úlohu se stejným ID, pokud tuto ukázku spustíme znovu.
await routerClient.DeleteJobAsync(accept.Value.JobId);
Console.WriteLine($"Deleting job {accept.Value.JobId}");
Spuštění kódu
Spusťte aplikaci pomocí dotnet run
a sledujte výsledky.
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
Poznámka:
Spuštění aplikace více než jednou způsobí, že se nová úloha pokaždé umístí do fronty. To může způsobit, že pracovní proces nabídne jinou úlohu než úlohu vytvořenou při spuštění výše uvedeného kódu. Vzhledem k tomu, že to může vaši žádost zkosit, zvažte odstranění úloh ve frontě pokaždé. Informace o správě fronty nebo úlohy najdete v dokumentaci k sadě SDK.
Referenční dokumentace
Přečtěte si o úplné sadě funkcí směrovače úloh Azure Communication Services z referenčních informací k sadě .NET SDK nebo referenčních informací k rozhraní REST API.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Aktivní prostředek služby Communication Services a připojovací řetězec. Vytvořte prostředek komunikační služby.
- Nejnovější verze Node.js verze LTS a údržba LTS.
Ukázkový kód
Ukázkový kód pro tento rychlý start si můžete prohlédnout a stáhnout na GitHubu.
Nastavení
Vytvoření nové webové aplikace
V okně terminálu nebo konzoly vytvořte pro aplikaci novou složku a přejděte na ni.
mkdir acs-router-quickstart && cd acs-router-quickstart
Spuštěním příkazu npm init
vytvořte soubor package.json s výchozím nastavením.
npm init -y
Vytvořte nový soubor index.js
, do kterého přidáte kód pro tento rychlý start.
Instalace balíčků
Pro JavaScript verze 1.0.0 nebo novější budete muset použít klientskou knihovnu směrovačů úloh Azure Communication Job Router.
npm install
Pomocí příkazu nainstalujte následující sady SDK komunikačních služeb pro JavaScript.
npm install @azure-rest/communication-job-router --save
Nastavení architektury aplikace
index.js
Do souboru přidejte následující kód. Do funkce přidáme kód pro rychlý start 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);
})
Inicializace klienta směrovače úloh
Klienti směrovače úloh se dají ověřit pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Vygenerujeme klienta pro interakci se službou Směrovač úloh. Další informace o připojovací řetězec najdete v tématu access-your-connection-strings-and-service-endpoints.
Do funkce přidejte následující kód index.js
main
.
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] ||
"endpoint=https://<resource-name>.communication.azure.com/;<access-key>";
const client = JobRouterClient(connectionString);
Vytvoření zásady distribuce
Směrovač úloh používá zásady distribuce k rozhodnutí, jak budou pracovníci upozorněni na dostupné úlohy a čas, kdy se budou oznámení zobrazovat, označované jako Nabídky. Vytvořte zásadu zadáním ID, názvu, nabídkyExpiresAfterSeconds a distribučního režimu.
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"
});
Vytvořit frontu
Vytvořte frontu zadáním ID, názvu a zadání ID objektu zásad distribuce, které jste vytvořili výše.
const queue = await client.path("/routing/queues/{queueId}", "queue-1").patch({
body: {
name: "My Queue",
distributionPolicyId: distributionPolicy.body.id
},
contentType: "application/merge-patch+json"
});
Odeslání úlohy
Teď můžeme odeslat úlohu přímo do této fronty s selektorem pracovního procesu, který vyžaduje, aby pracovní proces měl popisek Some-Skill
větší než 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"
});
Vytvoření pracovního procesu
Teď vytvoříme pracovní proces pro příjem práce z této fronty s popiskem Some-Skill
rovnajícím se 11 a kapacitě 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"
});
Přijetí nabídky
Měli bychom získat RouterWorkerOfferIssud z odběru Event Gridu. Mohli bychom ale také několik sekund počkat a pak dotazovat pracovníka přímo na rozhraní JOBRouter API, abychom zjistili, jestli byla pro něj vydána nabídka.
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}`);
}
Přijetí nabídky úloh
Potom může pracovní proces přijmout nabídku úlohy pomocí sady SDK, která tuto úlohu přiřadí pracovnímu procesu.
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}`);
Dokončení úlohy
Jakmile pracovní proces dokončí práci přidruženou k úloze (například dokončil hovor), dokončíme úlohu.
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}`);
Zavření úlohy
Jakmile je pracovní proces připravený k převzetí nových úloh, měl by pracovní proces úlohu zavřít. Volitelně může pracovník poskytnout kód dispozice, který bude indikovat výsledek úlohy.
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}`);
Odstranění úlohy
Po zavření úlohy můžeme úlohu odstranit, abychom mohli znovu vytvořit úlohu se stejným ID, pokud tuto ukázku spustíme znovu.
await client.path("/routing/jobs/{jobId}", accept.body.jobId).delete();
console.log(`Deleting job ${accept.body.jobId}`);
Spuštění kódu
Pokud chcete kód spustit, ujistěte se, že jste v adresáři, kde je váš index.js
soubor.
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
Poznámka:
Spuštění aplikace více než jednou způsobí, že se nová úloha pokaždé umístí do fronty. To může způsobit, že pracovní proces nabídne jinou úlohu než úlohu vytvořenou při spuštění výše uvedeného kódu. Vzhledem k tomu, že to může vaši žádost zkosit, zvažte odstranění úloh ve frontě pokaždé. Informace o správě fronty nebo úlohy najdete v dokumentaci k sadě SDK.
Referenční dokumentace
Přečtěte si o úplné sadě funkcí směrovače úloh Azure Communication Services z referenčních informací k sadě JavaScript SDK nebo referenčních informací k rozhraní REST API.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Aktivní prostředek služby Communication Services a připojovací řetězec. Vytvořte prostředek komunikační služby.
- Python 3.7+ pro váš operační systém
Ukázkový kód
Ukázkový kód pro tento rychlý start si můžete prohlédnout a stáhnout na GitHubu.
Nastavení
Vytvoření nové aplikace v Pythonu
V okně terminálu nebo konzoly vytvořte pro aplikaci novou složku a přejděte na ni.
mkdir jobrouter-quickstart && cd jobrouter-quickstart
Nainstalujte balíček .
Budete muset použít klientskou knihovnu směrovačů úloh Azure pro Python verze 1.0.0 nebo vyšší.
Z příkazového řádku konzoly spusťte následující příkaz:
pip install azure-communication-jobrouter
Nastavení architektury aplikace
Vytvořte volaný router-quickstart.py
nový soubor a přidejte základní strukturu 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()
Inicializace klienta směrovače úloh a klienta správy
Klienti směrovače úloh se dají ověřit pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Pro interakci se službou Směrovač úloh vygenerujeme klienta i klienta pro správu. Klient pro správu se používá ke zřizování front a zásad, zatímco klient se používá k odesílání úloh a registraci pracovních procesů. Další informace o připojovací řetězec najdete v tématu 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")
Vytvoření zásady distribuce
Směrovač úloh pomocí distribučních zásad rozhoduje o tom, jak budou pracovníci upozorněni na dostupné úlohy a čas, kdy se budou zobrazovat oznámení, označovaná jako Nabídky. Vytvořte zásadu zadáním distribution_policy_id, názvu, hodnoty offer_expires_after_seconds a distribučního režimu.
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")
Vytvořit frontu
Vytvořte frontu zadáním ID, názvu a zadání ID objektu zásad distribuce, které jste vytvořili výše.
queue = router_admin_client.upsert_queue(
queue_id = "queue-1",
name = "My Queue",
distribution_policy_id = distribution_policy.id)
Odeslání úlohy
Teď můžeme odeslat úlohu přímo do této fronty s selektorem pracovního procesu, který vyžaduje, aby pracovní proces měl popisek Some-Skill
větší než 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
)
])
Vytvoření pracovního procesu
Teď vytvoříme pracovní proces pro příjem práce z této fronty s popiskem Some-Skill
rovnajícím se 11 a kapacitě 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
)
Přijetí nabídky
Měli bychom získat RouterWorkerOfferIssud z odběru Event Gridu. Mohli bychom ale také několik sekund počkat a pak dotazovat pracovníka přímo na rozhraní JOBRouter API, abychom zjistili, jestli byla pro něj vydána nabídka.
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}")
Přijetí nabídky úloh
Potom může pracovní proces přijmout nabídku úlohy pomocí sady SDK, která tuto úlohu přiřadí pracovnímu procesu.
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}")
Dokončení úlohy
Jakmile pracovní proces dokončí práci přidruženou k úloze (například dokončil hovor), dokončíme úlohu.
router_client.complete_job(job_id = job.id, assignment_id = accept.assignment_id)
print(f"Worker {worker.id} has completed job {accept.job_id}")
Zavření úlohy
Jakmile je pracovní proces připravený k převzetí nových úloh, měl by pracovní proces úlohu zavřít. Volitelně může pracovník poskytnout kód dispozice, který bude indikovat výsledek úlohy.
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}")
Odstranění úlohy
Po zavření úlohy můžeme úlohu odstranit, abychom mohli znovu vytvořit úlohu se stejným ID, pokud tuto ukázku spustíme znovu.
router_client.delete_job(accept.job_id)
print(f"Deleting {accept.job_id}")
Spuštění kódu
Pokud chcete kód spustit, ujistěte se, že jste v adresáři, kde je váš router-quickstart.py
soubor.
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
Poznámka:
Spuštění aplikace více než jednou způsobí, že se nová úloha pokaždé umístí do fronty. To může způsobit, že pracovní proces nabídne jinou úlohu než úlohu vytvořenou při spuštění výše uvedeného kódu. Vzhledem k tomu, že to může vaši žádost zkosit, zvažte odstranění úloh ve frontě pokaždé. Informace o správě fronty nebo úlohy najdete v dokumentaci k sadě SDK.
Referenční dokumentace
Přečtěte si o úplné sadě funkcí směrovače úloh Azure Communication Services z referenčních informací k sadě Python SDK nebo referenčních informací k rozhraní REST API.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Aktivní prostředek služby Communication Services a připojovací řetězec. Vytvořte prostředek komunikační služby.
- Java Development Kit (JDK) verze 8 nebo novější.
- Apache Maven
Ukázkový kód
Ukázkový kód pro tento rychlý start si můžete prohlédnout a stáhnout na GitHubu.
Nastavení
Vytvoření nové aplikace v Javě
V okně konzoly (například cmd, PowerShell nebo Bash) pomocí mvn
následujícího příkazu vytvořte novou konzolovou aplikaci s názvem router-quickstart
. Tento příkaz vytvoří jednoduchý projekt "Hello World" Java s jedním zdrojovým souborem: App.java.
mvn archetype:generate -DgroupId=com.communication.jobrouter.quickstart -DartifactId=jobrouter-quickstart-java -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Zahrnout balíček
Budete muset použít klientskou knihovnu směrovačů úloh Azure pro Javu verze 1.0.0 nebo vyšší.
Zahrnutí souboru kusovníku
azure-sdk-bom
Zahrňte do projektu závislost na verzi obecné dostupnosti (GA) knihovny. V následujícím fragmentu kódu nahraďte zástupný symbol {bom_version_to_target} číslem verze.
Další informace o kusovníku najdete v souboru readme kusovníku sady 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>
a vložte přímou závislost do oddílu závislostí bez značky verze.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-jobrouter</artifactId>
</dependency>
</dependencies>
Zahrnout přímou závislost
Pokud chcete závislost na konkrétní verzi knihovny, která není v kusovníku, přidejte do projektu přímou závislost následujícím způsobem.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-jobrouter</artifactId>
<version>1.0.0</version>
</dependency>
Nastavení architektury aplikací
Přejděte do adresáře /src/main/java/com/communication/quickstart a otevřete App.java
soubor. Přidejte následující kód:
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
}
}
Inicializace klienta směrovače úloh a klienta správy
Klienti směrovače úloh se dají ověřit pomocí vašeho připojovací řetězec získaného z prostředku Azure Communication Services na webu Azure Portal. Pro interakci se službou Směrovač úloh vygenerujeme klienta i klienta pro správu. Klient pro správu se používá ke zřizování front a zásad, zatímco klient se používá k odesílání úloh a registraci pracovních procesů. Další informace o připojovací řetězec najdete v tématu 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();
Vytvoření zásady distribuce
Směrovač úloh pomocí distribučních zásad rozhoduje o tom, jak budou pracovníci upozorněni na dostupné úlohy a čas, kdy se budou zobrazovat oznámení, označovaná jako Nabídky. Vytvořte zásadu zadáním ID, názvu, nabídkyExpiresAfter a distribučního režimu.
DistributionPolicy distributionPolicy = routerAdminClient.createDistributionPolicy(
new CreateDistributionPolicyOptions("distribution-policy-1", Duration.ofMinutes(1), new LongestIdleMode())
.setName("My distribution policy"));
Vytvořit frontu
Vytvořte frontu zadáním ID, názvu a zadání ID objektu zásad distribuce, které jste vytvořili výše.
RouterQueue queue = routerAdminClient.createQueue(
new CreateQueueOptions("queue-1", distributionPolicy.getId()).setName("My queue")
);
Odeslání úlohy
Teď můžeme odeslat úlohu přímo do této fronty s selektorem pracovního procesu, který vyžaduje, aby pracovní proces měl popisek Some-Skill
větší než 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)))));
Vytvoření pracovního procesu
Teď vytvoříme pracovní proces pro příjem práce z této fronty s popiskem Some-Skill
rovnajícím se 11 a kapacitě 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))));
Přijetí nabídky
Měli bychom získat RouterWorkerOfferIssud z odběru Event Gridu. Mohli bychom ale také několik sekund počkat a pak dotazovat pracovníka přímo na rozhraní JOBRouter API, abychom zjistili, jestli byla pro něj vydána nabídka.
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());
}
Přijetí nabídky úloh
Potom může pracovní proces přijmout nabídku úlohy pomocí sady SDK, která tuto úlohu přiřadí pracovnímu procesu.
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());
Dokončení úlohy
Jakmile pracovní proces dokončí práci přidruženou k úloze (například dokončil hovor), dokončíme úlohu.
routerClient.completeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has completed job %s\n", worker.getId(), accept.getJobId());
Zavření úlohy
Jakmile je pracovní proces připravený k převzetí nových úloh, měl by pracovní proces úlohu zavřít.
routerClient.closeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has closed job %s\n", worker.getId(), accept.getJobId());
Odstranění úlohy
Po zavření úlohy můžeme úlohu odstranit, abychom mohli znovu vytvořit úlohu se stejným ID, pokud tuto ukázku spustíme znovu.
routerClient.deleteJob(accept.getJobId());
System.out.printf("Deleting job %s\n", accept.getJobId());
Spuštění kódu
Pokud chcete kód spustit, přejděte do adresáře, který obsahuje pom.xml
soubor, a zkompilujte program.
mvn compile
Pak sestavte balíček:
mvn package
Spuštění aplikace
mvn exec:java -Dexec.mainClass="com.communication.jobrouter.quickstart.App" -Dexec.cleanupDaemonThreads=false
Očekávaný výstup popisuje každou dokončenou akci:
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
Poznámka:
Spuštění aplikace více než jednou způsobí, že se nová úloha pokaždé umístí do fronty. To může způsobit, že pracovní proces nabídne jinou úlohu než úlohu vytvořenou při spuštění výše uvedeného kódu. Vzhledem k tomu, že to může vaši žádost zkosit, zvažte odstranění úloh ve frontě pokaždé. Informace o správě fronty nebo úlohy najdete v dokumentaci k sadě SDK.
Referenční dokumentace
Přečtěte si o úplné sadě funkcí směrovače úloh Azure Communication Services z referenčních informací k sadě Java SDK nebo z referenčních informací k rozhraní REST API.
Další kroky
Seznámení s návody ke směrovači úloh