Schnellstart: Übermitteln eines Auftrags für Warteschlangen und Routing

Wichtig

Die in diesem Abschnitt beschriebenen Funktionen befinden sich derzeit in der privaten Vorschauphase. Die private Vorschau umfasst zu Testzwecken den Zugriff auf SDKs und Dokumentationen, die noch nicht öffentlich verfügbar sind. Bewerben Sie sich, um Early Adopter zu werden, indem Sie das Formular für den Zugriff auf die Vorschauversion von Azure Communication Services ausfüllen.

Führen Sie erste Schritte mit einem Azure Communication Services-Auftragsrouter aus, indem Sie Ihren Client einrichten. Anschließend können Kernfunktionen wie Warteschlangen, Richtlinien, Worker und Aufträge konfiguriert werden. Weitere Informationen zu Auftragsrouterkonzepten finden Sie in der konzeptionellen Dokumentation zu Auftragsroutern.

Voraussetzungen

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

Laden Sie das SDK während der privaten Vorschau von GitHub herunter.

Hinweis

Sie müssen Mitglied der privaten Vorschaugruppe sein, um die SDKs herunterladen zu können.

Fügen Sie am Anfang von Program.cs die folgenden using-Anweisungen hinzu, um die JobRouter-Namespaces einzuschließen.

using Azure.Communication.JobRouter;
using Azure.Communication.JobRouter.Models;

Ändern Sie die Signatur der Hauptfunktion (Main) so, dass sie asynchron (async) ist und eine Aufgabe (Task) zurückgibt.

static async Task Main(string[] args)
{
  ...
}

Authentifizieren des Auftragsrouterclients

Auftragsrouterclients können mithilfe Ihrer Verbindungszeichenfolge authentifiziert werden, die von einer Azure Communication Services-Ressource im Azure-Portal abgerufen wird.

// Get a connection string to our Azure Communication Services resource.
var connectionString = "your_connection_string";
var client = new RouterClient(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 offerTTL und einen Verteilungsmodus angeben.

var distributionPolicy = await routerClient.SetDistributionPolicyAsync(
    id: "distribution-policy-1",
    name: "My Distribution Policy",
    offerTTL: TimeSpan.FromSeconds(30),
    mode: new LongestIdleMode()
);

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 routerClient.SetQueueAsync(
    id: "queue-1",
    name: "My Queue",
    distributionPolicyId: distributionPolicy.Value.Id
);

Übermitteln eines Auftrags

Jetzt können wir einen Auftrag direkt an diese Warteschlange übermitteln, mit einem Workerselektor, der vorschreibt, dass die Bezeichnung Some-Skill des Workers größer als 10 ist.

var job = await routerClient.CreateJobAsync(
    channelId: "my-channel",
    queueId: queue.Value.Id,
    priority: 1,
    workerSelectors: new List<LabelSelector>
    {
        new LabelSelector(
            key: "Some-Skill", 
            @operator: LabelOperator.GreaterThan, 
            value: 10)
    });

Registrieren eines Workers

Nun registrieren wir einen Worker für den Empfang von Arbeit aus dieser Warteschlange, mit der Bezeichnung Some-Skill gleich 11 und Kapazität auf my-channel.

var worker = await routerClient.RegisterWorkerAsync(
    id: "worker-1",
    queueIds: new[] { queue.Value.Id },
    totalCapacity: 1,
    labels: new LabelCollection()
    {
        ["Some-Skill"] = 11
    },
    channelConfigurations: new List<ChannelConfiguration>
    {
        new ChannelConfiguration("my-channel", 1)
    }
);

Angebot

Wir sollten ein RouterWorkerOfferIssued aus unserem EventGrid-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(2));
var result = await routerClient.GetWorkerAsync(worker.Value.Id);
foreach (var offer in result.Value.Offers)
{
    Console.WriteLine($"Worker {worker.Value.Id} has an active offer for job {offer.JobId}");
}

Führen Sie die Anwendung mithilfe von dotnet run aus, und sehen Sie sich die Ergebnisse an.

dotnet run


Worker worker-1 has an active offer for job 6b83c5ad-5a92-4aa8-b986-3989c791be91

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 entfernen. Informationen zum Verwalten einer Warteschlange oder eines Auftrags finden Sie in der SDK-Dokumentation.