Schnellstart: Übermitteln eines Auftrags für Warteschlangen und Routing
Beginnen Sie mit dem Azure Communication Services-Auftragsrouter, indem Sie Ihren Client einrichten und dann Kernfunktionen wie Warteschlangen, Richtlinien, Worker und Aufträge konfigurieren. Weitere Informationen zu Auftragsrouterkonzepten finden Sie in der konzeptionellen Dokumentation zu Auftragsroutern.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- Eine aktive Communication Services-Ressource und eine Verbindungszeichenfolge. Erstellen Sie eine Communication Services-Ressource.
- Die aktuelle Version der .NET-Clientbibliothek für Ihr Betriebssystem.
Beispielcode
Sie können den Beispielcode für diesen Schnellstart auf GitHub überprüfen und herunterladen.
Einrichten
Erstellen einer neuen C#-Anwendung
Verwenden Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) den Befehl dotnet new
zum Erstellen einer neuen Konsolen-App mit dem Namen JobRouterQuickstart
. Dieser Befehl erstellt ein einfaches „Hallo Welt“-C#-Projekt mit einer einzigen Quelldatei: Program.cs.
dotnet new console -o JobRouterQuickstart
Wechseln Sie zum neu erstellten App-Ordner, und verwenden Sie den Befehl dotnet build
, um Ihre Anwendung zu kompilieren.
cd JobRouterQuickstart
dotnet build
Installieren des Pakets
Installieren der Azure Communication-Auftragsrouter-Clientbibliothek für .NET für mit NuGet:
dotnet add package Azure.Communication.JobRouter
Sie müssen die Azure Communication-Auftragsrouter-Clientbibliothek für .NET Version 1.0.0 oder höher verwenden.
Fügen Sie am Anfang von Program.cs die folgenden using
-Anweisungen hinzu, um die JobRouter-Namespaces einzuschließen.
using Azure.Communication.JobRouter;
Initialisieren des Auftragsrouterclients und des Verwaltungsclients
Auftragsrouterclients können mithilfe Ihrer Verbindungszeichenfolge authentifiziert werden, die von einer Azure Communication Services-Ressource im Azure-Portal abgerufen wird. Wir generieren sowohl einen Client als auch einen Verwaltungsclient, der mit dem Auftragsrouterdienst interagiert. Der Administratorclient wird verwendet, um Warteschlangen und Richtlinien bereitzustellen, während der Client zum Übermitteln von Aufträgen und zum Registrieren von Workern verwendet wird. Weitere Informationen zu Verbindungszeichenfolgen finden Sie unter 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");
Erstellen einer Verteilungsrichtlinie
Der Auftragsrouter verwendet eine Verteilungsrichtlinie, um zu entscheiden, wie Worker über verfügbare Aufträge und die Gültigkeitsdauer für die Benachrichtigungen informiert werden. Dies wird als Angebote bezeichnet. Erstellen Sie die Richtlinie, indem Sie die ID, einen Namen, einen Wert für offerExpiresAfter und einen Verteilungsmodus angeben.
var distributionPolicy = await routerAdminClient.CreateDistributionPolicyAsync(
new CreateDistributionPolicyOptions(
distributionPolicyId: "distribution-policy-1",
offerExpiresAfter: TimeSpan.FromMinutes(1),
mode: new LongestIdleMode())
{
Name = "My distribution policy"
}
);
Erstellen einer Warteschlange
Erstellen Sie die Warteschlange, indem Sie eine ID, einen Namen und die ID des Objekts für die Verteilungsrichtlinie angeben, die Sie oben erstellt haben.
var queue = await routerAdminClient.CreateQueueAsync(
new CreateQueueOptions(queueId: "queue-1", distributionPolicyId: distributionPolicy.Value.Id)
{
Name = "My Queue"
});
Übermitteln eines Auftrags
Jetzt können wir einen Auftrag direkt an diese Warteschlange mit einem Workerselektor übermitteln, der vorschreibt, dass die Bezeichnung Some-Skill
des Workers größer als 10 ist.
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))
}
});
Erstellen eines Workers
Nun erstellen wir einen Worker für den Empfang von Arbeit aus dieser Warteschlange, mit der Bezeichnung Some-Skill
gleich 11 und Kapazität für 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
});
Erhalten eines Angebots
Wir sollten RouterWorkerOfferIssued aus unserem Event Grid-Abonnement erhalten. Wir könnten jedoch auch einige Sekunden warten und dann den Worker direkt mit der JobRouter-API abfragen, um zu sehen, ob ein Angebot an ihn ausgegeben wurde.
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}");
}
Annehmen des Auftragsangebots
Anschließend kann der Worker das Auftragsangebot annehmen, indem er das SDK verwendet, das den Auftrag dem Worker zuweist.
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}");
Abschließen des Auftrags
Sobald der Worker die dem Auftrag zugeordnete Arbeit abgeschlossen hat (z. B. den Aufruf abgeschlossen), schließen wir den Auftrag ab.
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}");
Schließen des Auftrags
Sobald der Worker bereit ist, neue Aufträge zu übernehmen, sollte er den Auftrag schließen. Optional kann der Worker einen Dispositionscode bereitstellen, um das Ergebnis des Auftrags anzugeben.
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}");
Löschen des Auftrags
Nachdem der Auftrag geschlossen wurde, können wir ihn löschen, sodass der Auftrag mit derselben ID neu erstellt werden kann, wenn wir dieses Beispiel erneut ausführen.
await routerClient.DeleteJobAsync(accept.Value.JobId);
Console.WriteLine($"Deleting job {accept.Value.JobId}");
Ausführen des Codes
Führen Sie die Anwendung mithilfe von dotnet run
aus, und sehen Sie sich die Ergebnisse an.
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
Hinweis
Wenn Sie die Anwendung mehrmals ausführen, wird jedes Mal ein neuer Auftrag in die Warteschlange eingereiht. Dies kann dazu führen, dass dem Worker ein anderer Auftrag als der angeboten wird, der beim Ausführen des obigen Codes erstellt wurde. Da dies die Anforderung verzerren kann, sollten Sie Aufträge in der Warteschlange ggf. jedes Mal löschen. Informationen zum Verwalten einer Warteschlange oder eines Auftrags finden Sie in der SDK-Dokumentation.
Referenzdokumentation
Lesen Sie mehr zu den vollständigen Funktionen von Azure Communication Services-Auftragsroutern in der .NET SDK-Referenz oder REST-API-Referenz.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- Eine aktive Communication Services-Ressource und eine Verbindungszeichenfolge. Erstellen Sie eine Communication Services-Ressource.
- Die aktuellen Versionen von Node.js. Active LTS- und Maintenance LTS Versionen
Beispielcode
Sie können den Beispielcode für diesen Schnellstart auf GitHub überprüfen und herunterladen.
Einrichten
Erstellen einer neuen Webanwendung
Erstellen Sie in einem Terminal- oder Konsolenfenster einen neuen Ordner für Ihre Anwendung, und navigieren Sie zu diesem Verzeichnis.
mkdir acs-router-quickstart && cd acs-router-quickstart
Führen Sie npm init
aus, um die Datei package.json mit den Standardeinstellungen zu erstellen.
npm init -y
Erstellen Sie eine neue index.js
-Datei, in der Sie Code für diesen Schnellstart hinzufügen.
Installieren der Pakete
Sie müssen die Azure Communication-Auftragsrouter-Clientbibliothek für JavaScript Version 1.0.0 oder höher verwenden.
Verwenden Sie den Befehl npm install
, um die unten angegebenen Communication Services-SDKs für JavaScript zu installieren.
npm install @azure-rest/communication-job-router --save
Einrichten des App-Frameworks
Fügen Sie in der Datei index.js
den folgenden Code hinzu. Wir fügen den Code für den Schnellstart in der main
-Funktion hinzu.
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);
})
Initialisieren des Auftragsrouterclients
Auftragsrouterclients können mithilfe Ihrer Verbindungszeichenfolge authentifiziert werden, die von einer Azure Communication Services-Ressource im Azure-Portal abgerufen wird. Wir generieren einen Client für die Interaktion mit dem Auftragsrouterdienst. Weitere Informationen zu Verbindungszeichenfolgen finden Sie unter access-your-connection-strings-and-service-endpoints.
Fügen Sie in index.js
innerhalb der main
-Funktion den folgenden Code hinzu.
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] ||
"endpoint=https://<resource-name>.communication.azure.com/;<access-key>";
const client = JobRouterClient(connectionString);
Erstellen einer Verteilungsrichtlinie
Der Auftragsrouter verwendet eine Verteilungsrichtlinie, um zu entscheiden, wie Worker über verfügbare Aufträge und die Gültigkeitsdauer für die Benachrichtigungen informiert werden. Dies wird als Angebote bezeichnet. Erstellen Sie die Richtlinie, indem Sie die ID, einen Namen, einen Wert für offerExpiresAfterSeconds und einen Verteilungsmodus angeben.
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"
});
Erstellen einer Warteschlange
Erstellen Sie die Warteschlange, indem Sie eine ID, einen Namen und die ID des Objekts für die Verteilungsrichtlinie angeben, die Sie oben erstellt haben.
const queue = await client.path("/routing/queues/{queueId}", "queue-1").patch({
body: {
name: "My Queue",
distributionPolicyId: distributionPolicy.body.id
},
contentType: "application/merge-patch+json"
});
Übermitteln eines Auftrags
Jetzt können wir einen Auftrag direkt an diese Warteschlange mit einem Workerselektor übermitteln, der vorschreibt, dass die Bezeichnung Some-Skill
des Workers größer als 10 ist.
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"
});
Erstellen eines Workers
Nun erstellen wir einen Worker für den Empfang von Arbeit aus dieser Warteschlange, mit der Bezeichnung Some-Skill
gleich 11 und Kapazität für 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"
});
Erhalten eines Angebots
Wir sollten RouterWorkerOfferIssued aus unserem Event Grid-Abonnement erhalten. Wir könnten jedoch auch einige Sekunden warten und dann den Worker direkt mit der JobRouter-API abfragen, um zu sehen, ob ein Angebot an ihn ausgegeben wurde.
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}`);
}
Annehmen des Auftragsangebots
Anschließend kann der Worker das Auftragsangebot annehmen, indem er das SDK verwendet, das den Auftrag dem Worker zuweist.
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}`);
Abschließen des Auftrags
Sobald der Worker die dem Auftrag zugeordnete Arbeit abgeschlossen hat (z. B. den Aufruf abgeschlossen), schließen wir den Auftrag ab.
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}`);
Schließen des Auftrags
Sobald der Worker bereit ist, neue Aufträge zu übernehmen, sollte er den Auftrag schließen. Optional kann der Worker einen Dispositionscode bereitstellen, um das Ergebnis des Auftrags anzugeben.
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}`);
Löschen des Auftrags
Nachdem der Auftrag geschlossen wurde, können wir ihn löschen, sodass der Auftrag mit derselben ID neu erstellt werden kann, wenn wir dieses Beispiel erneut ausführen.
await client.path("/routing/jobs/{jobId}", accept.body.jobId).delete();
console.log(`Deleting job ${accept.body.jobId}`);
Ausführen des Codes
Vergewissern Sie sich, dass Sie sich in dem Verzeichnis befinden, in dem sich die index.js
-Datei befindet, um den Code auszuführen.
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
Hinweis
Wenn Sie die Anwendung mehrmals ausführen, wird jedes Mal ein neuer Auftrag in die Warteschlange eingereiht. Dies kann dazu führen, dass dem Worker ein anderer Auftrag als der angeboten wird, der beim Ausführen des obigen Codes erstellt wurde. Da dies die Anforderung verzerren kann, sollten Sie Aufträge in der Warteschlange ggf. jedes Mal löschen. Informationen zum Verwalten einer Warteschlange oder eines Auftrags finden Sie in der SDK-Dokumentation.
Referenzdokumentation
Lesen Sie mehr zu den vollständigen Funktionen von Azure Communication Services-Auftragsroutern in der JavaScript SDK-Referenz oder REST-API-Referenz.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- Eine aktive Communication Services-Ressource und eine Verbindungszeichenfolge. Erstellen Sie eine Communication Services-Ressource.
- Python 3.7 oder höher für Ihr Betriebssystem
Beispielcode
Sie können den Beispielcode für diesen Schnellstart auf GitHub überprüfen und herunterladen.
Einrichten
Erstellen einer neuen Python-Anwendung
Erstellen Sie in einem Terminal- oder Konsolenfenster einen neuen Ordner für Ihre Anwendung, und navigieren Sie zu diesem Verzeichnis.
mkdir jobrouter-quickstart && cd jobrouter-quickstart
Installieren des Pakets
Sie müssen die Azure Communication-Auftragsrouter-Clientbibliothek für Python Version 1.0.0 oder höher verwenden.
Führen Sie in der Konsolen-Eingabeaufforderung den folgenden Befehl aus:
pip install azure-communication-jobrouter
Einrichten des App-Frameworks
Erstellen Sie eine neue Datei namens router-quickstart.py
, und fügen Sie die grundlegende Programmstruktur hinzu.
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()
Initialisieren des Auftragsrouterclients und des Verwaltungsclients
Auftragsrouterclients können mithilfe Ihrer Verbindungszeichenfolge authentifiziert werden, die von einer Azure Communication Services-Ressource im Azure-Portal abgerufen wird. Wir generieren sowohl einen Client als auch einen Verwaltungsclient, der mit dem Auftragsrouterdienst interagiert. Der Administratorclient wird verwendet, um Warteschlangen und Richtlinien bereitzustellen, während der Client zum Übermitteln von Aufträgen und zum Registrieren von Workern verwendet wird. Weitere Informationen zu Verbindungszeichenfolgen finden Sie unter 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")
Erstellen einer Verteilungsrichtlinie
Der Auftragsrouter verwendet eine Verteilungsrichtlinie, um zu entscheiden, wie Worker über verfügbare Aufträge und die Gültigkeitsdauer für die Benachrichtigungen informiert werden. Dies wird als Angebote bezeichnet. Erstellen Sie die Richtlinie, indem Sie einen Wert für distribution_policy_id, name und offer_expires_after_seconds sowie einen Modus (mode) für die Verteilung angeben.
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")
Erstellen einer Warteschlange
Erstellen Sie die Warteschlange, indem Sie eine ID, einen Namen und die ID des Objekts für die Verteilungsrichtlinie angeben, die Sie oben erstellt haben.
queue = router_admin_client.upsert_queue(
queue_id = "queue-1",
name = "My Queue",
distribution_policy_id = distribution_policy.id)
Übermitteln eines Auftrags
Jetzt können wir einen Auftrag direkt an diese Warteschlange mit einem Workerselektor übermitteln, der vorschreibt, dass die Bezeichnung Some-Skill
des Workers größer als 10 ist.
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
)
])
Erstellen eines Workers
Nun erstellen wir einen Worker für den Empfang von Arbeit aus dieser Warteschlange, mit der Bezeichnung Some-Skill
gleich 11 und Kapazität für 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
)
Erhalten eines Angebots
Wir sollten RouterWorkerOfferIssued aus unserem Event Grid-Abonnement erhalten. Wir könnten jedoch auch einige Sekunden warten und dann den Worker direkt mit der JobRouter-API abfragen, um zu sehen, ob ein Angebot an ihn ausgegeben wurde.
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}")
Annehmen des Auftragsangebots
Anschließend kann der Worker das Auftragsangebot annehmen, indem er das SDK verwendet, das den Auftrag dem Worker zuweist.
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}")
Abschließen des Auftrags
Sobald der Worker die dem Auftrag zugeordnete Arbeit abgeschlossen hat (z. B. den Aufruf abgeschlossen), schließen wir den Auftrag ab.
router_client.complete_job(job_id = job.id, assignment_id = accept.assignment_id)
print(f"Worker {worker.id} has completed job {accept.job_id}")
Schließen des Auftrags
Sobald der Worker bereit ist, neue Aufträge zu übernehmen, sollte er den Auftrag schließen. Optional kann der Worker einen Dispositionscode bereitstellen, um das Ergebnis des Auftrags anzugeben.
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}")
Löschen des Auftrags
Nachdem der Auftrag geschlossen wurde, können wir ihn löschen, sodass der Auftrag mit derselben ID neu erstellt werden kann, wenn wir dieses Beispiel erneut ausführen.
router_client.delete_job(accept.job_id)
print(f"Deleting {accept.job_id}")
Ausführen des Codes
Vergewissern Sie sich, dass Sie sich in dem Verzeichnis befinden, in dem sich die router-quickstart.py
-Datei befindet, um den Code auszuführen.
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
Hinweis
Wenn Sie die Anwendung mehrmals ausführen, wird jedes Mal ein neuer Auftrag in die Warteschlange eingereiht. Dies kann dazu führen, dass dem Worker ein anderer Auftrag als der angeboten wird, der beim Ausführen des obigen Codes erstellt wurde. Da dies die Anforderung verzerren kann, sollten Sie Aufträge in der Warteschlange ggf. jedes Mal löschen. Informationen zum Verwalten einer Warteschlange oder eines Auftrags finden Sie in der SDK-Dokumentation.
Referenzdokumentation
Lesen Sie mehr zu den vollständigen Funktionen von Azure Communication Services-Auftragsroutern in der Python SDK-Referenz oder REST-API-Referenz.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- Eine aktive Communication Services-Ressource und eine Verbindungszeichenfolge. Erstellen Sie eine Communication Services-Ressource.
- Java Development Kit (JDK), Version 8 oder höher.
- Apache Maven
Beispielcode
Sie können den Beispielcode für diesen Schnellstart auf GitHub überprüfen und herunterladen.
Einrichten
Erstellen einer neuen Java-Anwendung
Verwenden Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) den Befehl mvn
unten zum Erstellen einer neuen Konsolen-App mit dem Namen router-quickstart
. Dieser Befehl erstellt ein einfaches Java-Projekt vom Typ „Hallo Welt“ mit einer einzelnen Quelldatei: App.java.
mvn archetype:generate -DgroupId=com.communication.jobrouter.quickstart -DartifactId=jobrouter-quickstart-java -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Einschließen des Pakets
Sie müssen die Azure Communication-Auftragsrouter-Clientbibliothek für Java Version 1.0.0 oder höher verwenden.
BOM-Datei einfügen
Fügen Sie azure-sdk-bom
in Ihr Projekt ein, um die Abhängigkeit der allgemein verfügbaren Version der Bibliothek zu übernehmen. Ersetzen Sie im folgenden Codeausschnitt den Platzhalter {bom_version_to_target} durch die Versionsnummer.
Weitere Informationen zur BOM finden Sie in der Azure SDK-BOM-Infodatei.
<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>
und fügen Sie dann die direkte Abhängigkeit ohne Versions-Tag in den Abschnitt „Abhängigkeit“ ein.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-jobrouter</artifactId>
</dependency>
</dependencies>
Direkte Abhängigkeiten einfügen
Wenn Sie eine Abhängigkeit von einer bestimmten Version der Bibliothek übernehmen möchten, die nicht in der BOM vorhanden ist, fügen Sie ihrem Projekt die direkte Abhängigkeit wie folgt hinzu.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-jobrouter</artifactId>
<version>1.0.0</version>
</dependency>
Einrichten des App-Frameworks
Wechseln Sie zum Verzeichnis „/src/main/java/com/communication/quickstart“, und öffnen Sie die App.java
-Datei. Fügen Sie den folgenden Code hinzu:
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
}
}
Initialisieren des Auftragsrouterclients und des Verwaltungsclients
Auftragsrouterclients können mithilfe Ihrer Verbindungszeichenfolge authentifiziert werden, die von einer Azure Communication Services-Ressource im Azure-Portal abgerufen wird. Wir generieren sowohl einen Client als auch einen Verwaltungsclient, der mit dem Auftragsrouterdienst interagiert. Der Administratorclient wird verwendet, um Warteschlangen und Richtlinien bereitzustellen, während der Client zum Übermitteln von Aufträgen und zum Registrieren von Workern verwendet wird. Weitere Informationen zu Verbindungszeichenfolgen finden Sie unter 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();
Erstellen einer Verteilungsrichtlinie
Der Auftragsrouter verwendet eine Verteilungsrichtlinie, um zu entscheiden, wie Worker über verfügbare Aufträge und die Gültigkeitsdauer für die Benachrichtigungen informiert werden. Dies wird als Angebote bezeichnet. Erstellen Sie die Richtlinie, indem Sie die ID, einen Namen, einen Wert für offerExpiresAfter und einen Verteilungsmodus angeben.
DistributionPolicy distributionPolicy = routerAdminClient.createDistributionPolicy(
new CreateDistributionPolicyOptions("distribution-policy-1", Duration.ofMinutes(1), new LongestIdleMode())
.setName("My distribution policy"));
Erstellen einer Warteschlange
Erstellen Sie die Warteschlange, indem Sie eine ID, einen Namen und die ID des Objekts für die Verteilungsrichtlinie angeben, die Sie oben erstellt haben.
RouterQueue queue = routerAdminClient.createQueue(
new CreateQueueOptions("queue-1", distributionPolicy.getId()).setName("My queue")
);
Übermitteln eines Auftrags
Jetzt können wir einen Auftrag direkt an diese Warteschlange mit einem Workerselektor übermitteln, der vorschreibt, dass die Bezeichnung Some-Skill
des Workers größer als 10 ist.
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)))));
Erstellen eines Workers
Nun erstellen wir einen Worker für den Empfang von Arbeit aus dieser Warteschlange, mit der Bezeichnung Some-Skill
gleich 11 und Kapazität für 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))));
Erhalten eines Angebots
Wir sollten RouterWorkerOfferIssued aus unserem Event Grid-Abonnement erhalten. Wir könnten jedoch auch einige Sekunden warten und dann den Worker direkt mit der JobRouter-API abfragen, um zu sehen, ob ein Angebot an ihn ausgegeben wurde.
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());
}
Annehmen des Auftragsangebots
Anschließend kann der Worker das Auftragsangebot annehmen, indem er das SDK verwendet, das den Auftrag dem Worker zuweist.
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());
Abschließen des Auftrags
Sobald der Worker die dem Auftrag zugeordnete Arbeit abgeschlossen hat (z. B. den Aufruf abgeschlossen), schließen wir den Auftrag ab.
routerClient.completeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has completed job %s\n", worker.getId(), accept.getJobId());
Schließen des Auftrags
Sobald der Worker bereit ist, neue Aufträge zu übernehmen, sollte er den Auftrag schließen.
routerClient.closeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has closed job %s\n", worker.getId(), accept.getJobId());
Löschen des Auftrags
Nachdem der Auftrag geschlossen wurde, können wir ihn löschen, sodass der Auftrag mit derselben ID neu erstellt werden kann, wenn wir dieses Beispiel erneut ausführen.
routerClient.deleteJob(accept.getJobId());
System.out.printf("Deleting job %s\n", accept.getJobId());
Ausführen des Codes
Navigieren Sie zum Ausführen des Codes zum Verzeichnis, das die pom.xml
-Datei enthält, und kompilieren Sie das Programm.
mvn compile
Erstellen Sie dann das Paket:
mvn package
Ausführen der Anwendung
mvn exec:java -Dexec.mainClass="com.communication.jobrouter.quickstart.App" -Dexec.cleanupDaemonThreads=false
In der erwarteten Ausgabe wird jede abgeschlossene Aktion beschrieben:
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
Hinweis
Wenn Sie die Anwendung mehrmals ausführen, wird jedes Mal ein neuer Auftrag in die Warteschlange eingereiht. Dies kann dazu führen, dass dem Worker ein anderer Auftrag als der angeboten wird, der beim Ausführen des obigen Codes erstellt wurde. Da dies die Anforderung verzerren kann, sollten Sie Aufträge in der Warteschlange ggf. jedes Mal löschen. Informationen zum Verwalten einer Warteschlange oder eines Auftrags finden Sie in der SDK-Dokumentation.
Referenzdokumentation
Lesen Sie mehr zu den vollständigen Funktionen von Azure Communication Services-Auftragsroutern in der Java-SDK-Referenz oder REST-API-Referenz.
Nächste Schritte
Erkunden der Tutorials zu Auftragsroutern