Aracılığıyla paylaş


Hızlı Başlangıç: Kuyruğa alma ve yönlendirme için iş gönderme

İstemcinizi ayarlayıp kuyruklar, ilkeler, çalışanlar ve İşler gibi temel işlevleri yapılandırarak Azure İletişim Hizmetleri İş Yönlendiricisi'ni kullanmaya başlayın. İş Yönlendiricisi kavramları hakkında daha fazla bilgi edinmek için İş Yönlendiricisi kavramsal belgelerini ziyaret edin

Önkoşullar

Örnek kod

GitHub'da bu hızlı başlangıç için örnek kodu gözden geçirebilir ve indirebilirsiniz.

Ayarlama

Yeni bir C# uygulaması oluşturma

Bir konsol penceresinde (cmd, PowerShell veya Bash gibi), adlı JobRouterQuickstartyeni bir konsol uygulaması oluşturmak için komutunu kullanındotnet new. Bu komut, tek bir kaynak dosyası olan basit bir "Merhaba Dünya" C# projesi oluşturur: Program.cs.

dotnet new console -o JobRouterQuickstart

Dizininizi yeni oluşturulan uygulama klasörüne değiştirin ve komutunu kullanarak dotnet build uygulamanızı derleyin.

cd JobRouterQuickstart
dotnet build

paketini yükleyin

NuGet ile .NET için Azure İletişim İş Yönlendiricisi istemci kitaplığını yükleyin:

dotnet add package Azure.Communication.JobRouter

.NET sürüm 1.0.0 veya üzeri için Azure İletişim İşi Yönlendiricisi istemci kitaplığını kullanmanız gerekir.

JobRouter ad alanlarını eklemek için program.cs dosyasının en üstüne aşağıdaki using yönergeleri ekleyin.

using Azure.Communication.JobRouter;

İş Yönlendiricisi istemcisini ve yönetim istemcisini başlatma

İş Yönlendiricisi istemcilerinin kimliği, Azure portalındaki bir Azure İletişim Hizmetleri kaynağından alınan bağlantı dizesi kullanılarak doğrulanabilir. İş Yönlendiricisi hizmetiyle etkileşime geçmek için hem bir istemci hem de bir yönetim istemcisi oluşturuyoruz. Yönetici istemcisi kuyrukları ve ilkeleri sağlamak için kullanılırken, istemci işleri göndermek ve çalışanları kaydetmek için kullanılır. bağlantı dizesi hakkında daha fazla bilgi için bkz. 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");

Dağıtım ilkesi oluşturma

İş Yönlendiricisi, Çalışanlara kullanılabilir İşler hakkında nasıl bildirim ve bildirimler için yaşam süresi (Teklifler olarak bilinir) bildirileceğine karar vermek için bir dağıtım ilkesi kullanır. Kimlik, ad, offerExpiresAfter ve dağıtım modunu belirterek ilkeyi oluşturun.

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

Kuyruk oluştur

Bir kimlik, ad belirterek Kuyruk oluşturun ve yukarıda oluşturduğunuz Dağıtım İlkesi nesnesinin kimliğini belirtin.

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

İş gönderme

Şimdi, çalışanın etiketi Some-Skill 10'dan büyük olmasını gerektiren bir çalışan seçicisi ile doğrudan bu kuyruğa bir iş gönderebiliriz.

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

Çalışan oluşturma

Şimdi bu kuyruktan iş almak için 11'e eşit etikete Some-Skill ve üzerinde my-channelkapasiteye sahip bir çalışan oluşturuyoruz.

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

Teklif alma

Event Grid aboneliğimizden RouterWorkerOfferIssuedalmalıyız. Ancak birkaç saniye bekleyebilir ve ardından bir teklif yayımlanıp sunulmadığını görmek için çalışanı doğrudan JobRouter API'sine karşı sorgulayabiliriz.

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

İş teklifini kabul etme

Ardından çalışan, işi çalışana atayan SDK'yı kullanarak iş teklifini kabul edebilir.

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

İşi tamamlama

Çalışan işle ilişkili çalışmayı tamamladıktan sonra (örneğin, aramayı tamamladıktan) sonra işi tamamlarız.

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

İşi kapatma

Çalışan yeni işleri almaya hazır olduğunda, çalışanın işi kapatması gerekir. İsteğe bağlı olarak, çalışan işin sonucunu belirtmek için bir değerlendirme kodu sağlayabilir.

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

İşi silme

İş kapatıldıktan sonra, bu örneği yeniden çalıştırırsak işi aynı kimlikle yeniden oluşturabilmek için işi silebiliriz

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

Kodu çalıştırma

kullanarak dotnet run uygulamayı çalıştırın ve sonuçları gözlemleyin.

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

Dekont

Uygulamayı birden çok kez çalıştırmak, her seferinde yeni bir İşin kuyruğa yerleştirilmesine neden olur. Bu, çalışana yukarıdaki kodu çalıştırdığınızda oluşturulandan başka bir İş teklif edilmesine neden olabilir. Bu, isteğinizi çarpıtabileceği için kuyruktaki İşleri her seferinde silmeyi göz önünde bulundurun. Kuyruk veya İş yönetimi için SDK belgelerine bakın.

Başvuru belgeleri

.NET SDK başvurusundan veya REST API başvurusundan Azure İletişim Hizmetleri İş Yönlendiricisi'nin tüm özellikleri hakkında bilgi edinin.

Önkoşullar

Örnek kod

GitHub'da bu hızlı başlangıç için örnek kodu gözden geçirebilir ve indirebilirsiniz.

Ayarlama

Yeni web uygulaması oluşturma

Terminal veya konsol penceresinde uygulamanız için yeni bir klasör oluşturun ve bu klasöre gidin.

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

Komutunu çalıştırarak npm init varsayılan ayarlarla bir package.json dosyası oluşturun.

npm init -y

Bu hızlı başlangıcın kodunu ekleyeceğiniz yeni bir dosya index.js oluşturun.

Paketleri yükleme

JavaScript sürüm 1.0.0 veya üzeri için Azure İletişim İş Yönlendiricisi istemci kitaplığını kullanmanız gerekir.

npm install JavaScript için aşağıdaki İletişim Hizmetleri SDK'larını yüklemek için komutunu kullanın.

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

Uygulama çerçevesini ayarlama

index.js dosyasına aşağıdaki kodu ekleyin. hızlı başlangıcın kodunu işleve main ekleyeceğiz.

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

İş Yönlendiricisi istemcisini başlatma

İş Yönlendiricisi istemcilerinin kimliği, Azure portalındaki bir Azure İletişim Hizmetleri kaynağından alınan bağlantı dizesi kullanılarak doğrulanabilir. İş Yönlendiricisi hizmetiyle etkileşime geçmek için bir istemci oluşturuyoruz. bağlantı dizesi hakkında daha fazla bilgi için bkz. access-your-connection-strings-and-service-endpoints.

İşlevin içine index.jsmain aşağıdaki kodu ekleyin.

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

Dağıtım ilkesi oluşturma

İş Yönlendiricisi, çalışanlara kullanılabilir İşler hakkında nasıl bildirimde bulunulacaklarına ve Bildirimler için yaşam süresine (Teklifler olarak bilinir) karar vermek için bir dağıtım ilkesi kullanır. Kimlik, ad, offerExpiresAfterSeconds ve dağıtım modunu belirterek ilkeyi oluşturun.

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

Kuyruk oluştur

Bir kimlik, ad belirterek Kuyruk oluşturun ve yukarıda oluşturduğunuz Dağıtım İlkesi nesnesinin kimliğini belirtin.

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

İş gönderme

Şimdi, çalışanın etiketi Some-Skill 10'dan büyük olmasını gerektiren bir çalışan seçicisi ile doğrudan bu kuyruğa bir iş gönderebiliriz.

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

Çalışan oluşturma

Şimdi bu kuyruktan iş almak için 11'e eşit etikete Some-Skill ve üzerinde my-channelkapasiteye sahip bir çalışan oluşturuyoruz.

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

Teklif alma

Event Grid aboneliğimizden RouterWorkerOfferIssuedalmalıyız. Ancak birkaç saniye bekleyebilir ve ardından bir teklif yayımlanıp sunulmadığını görmek için çalışanı doğrudan JobRouter API'sine karşı sorgulayabiliriz.

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

İş teklifini kabul etme

Ardından çalışan, işi çalışana atayan SDK'yı kullanarak iş teklifini kabul edebilir.

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

İşi tamamlama

Çalışan işle ilişkili çalışmayı tamamladıktan sonra (örneğin, aramayı tamamladıktan) sonra işi tamamlarız.

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

İşi kapatma

Çalışan yeni işleri almaya hazır olduğunda, çalışanın işi kapatması gerekir. İsteğe bağlı olarak, çalışan işin sonucunu belirtmek için bir değerlendirme kodu sağlayabilir.

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

İşi silme

İş kapatıldıktan sonra, bu örneği yeniden çalıştırırsak işi aynı kimlikle yeniden oluşturabilmek için işi silebiliriz

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

Kodu çalıştırma

Kodu çalıştırmak için dosyanızın index.js bulunduğu dizinde olduğunuzdan emin olun.

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

Dekont

Uygulamayı birden çok kez çalıştırmak, her seferinde yeni bir İşin kuyruğa yerleştirilmesine neden olur. Bu, çalışana yukarıdaki kodu çalıştırdığınızda oluşturulandan başka bir İş teklif edilmesine neden olabilir. Bu, isteğinizi çarpıtabileceği için kuyruktaki İşleri her seferinde silmeyi göz önünde bulundurun. Kuyruk veya İş yönetimi için SDK belgelerine bakın.

Başvuru belgeleri

JavaScript SDK başvurusundan veya REST API başvurusundan Azure İletişim Hizmetleri İş Yönlendiricisi'nin tüm özellikleri hakkında bilgi edinin.

Önkoşullar

Örnek kod

GitHub'da bu hızlı başlangıç için örnek kodu gözden geçirebilir ve indirebilirsiniz.

Ayarlama

Yeni Python uygulaması oluşturma

Terminal veya konsol penceresinde uygulamanız için yeni bir klasör oluşturun ve bu klasöre gidin.

mkdir jobrouter-quickstart && cd jobrouter-quickstart

paketini yükleyin

Python sürüm 1.0.0 veya üzeri için Azure İletişim İş Yönlendiricisi istemci kitaplığını kullanmanız gerekir.

Konsol isteminden aşağıdaki komutu yürütür:

pip install azure-communication-jobrouter

Uygulama çerçevesini ayarlama

adlı router-quickstart.py yeni bir dosya oluşturun ve temel program yapısını ekleyin.

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

İş Yönlendiricisi istemcisini ve yönetim istemcisini başlatma

İş Yönlendiricisi istemcilerinin kimliği, Azure portalındaki bir Azure İletişim Hizmetleri kaynağından alınan bağlantı dizesi kullanılarak doğrulanabilir. İş Yönlendiricisi hizmetiyle etkileşime geçmek için hem bir istemci hem de bir yönetim istemcisi oluşturuyoruz. Yönetici istemcisi kuyrukları ve ilkeleri sağlamak için kullanılırken, istemci işleri göndermek ve çalışanları kaydetmek için kullanılır. bağlantı dizesi hakkında daha fazla bilgi için bkz. 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")

Dağıtım ilkesi oluşturma

İş Yönlendiricisi, Çalışanlara kullanılabilir İşler hakkında nasıl bildirim ve bildirimler için yaşam süresi (Teklifler olarak bilinir) bildirileceğine karar vermek için bir dağıtım ilkesi kullanır. distribution_policy_id, ad, offer_expires_after_seconds değeri ve dağıtım modunu belirterek ilkeyi oluşturun.

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

Kuyruk oluştur

Bir kimlik, ad belirterek Kuyruk oluşturun ve yukarıda oluşturduğunuz Dağıtım İlkesi nesnesinin kimliğini belirtin.

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

İş gönderme

Şimdi, çalışanın etiketi Some-Skill 10'dan büyük olmasını gerektiren bir çalışan seçicisi ile doğrudan bu kuyruğa bir iş gönderebiliriz.

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

Çalışan oluşturma

Şimdi bu kuyruktan iş almak için 11'e eşit etikete Some-Skill ve üzerinde my-channelkapasiteye sahip bir çalışan oluşturuyoruz.

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
)

Teklif alma

Event Grid aboneliğimizden RouterWorkerOfferIssuedalmalıyız. Ancak birkaç saniye bekleyebilir ve ardından bir teklif yayımlanıp sunulmadığını görmek için çalışanı doğrudan JobRouter API'sine karşı sorgulayabiliriz.

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

İş teklifini kabul etme

Ardından çalışan, işi çalışana atayan SDK'yı kullanarak iş teklifini kabul edebilir.

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

İşi tamamlama

Çalışan işle ilişkili çalışmayı tamamladıktan sonra (örneğin, aramayı tamamladıktan) sonra işi tamamlarız.

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

İşi kapatma

Çalışan yeni işleri almaya hazır olduğunda, çalışanın işi kapatması gerekir. İsteğe bağlı olarak, çalışan işin sonucunu belirtmek için bir değerlendirme kodu sağlayabilir.

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

İşi silme

İş kapatıldıktan sonra, bu örneği yeniden çalıştırırsak işi aynı kimlikle yeniden oluşturabilmek için işi silebiliriz

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

Kodu çalıştırma

Kodu çalıştırmak için dosyanızın router-quickstart.py bulunduğu dizinde olduğunuzdan emin olun.

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

Dekont

Uygulamayı birden çok kez çalıştırmak, her seferinde yeni bir İşin kuyruğa yerleştirilmesine neden olur. Bu, çalışana yukarıdaki kodu çalıştırdığınızda oluşturulandan başka bir İş teklif edilmesine neden olabilir. Bu, isteğinizi çarpıtabileceği için kuyruktaki İşleri her seferinde silmeyi göz önünde bulundurun. Kuyruk veya İş yönetimi için SDK belgelerine bakın.

Başvuru belgeleri

Python SDK başvurusundan veya REST API başvurusundan Azure İletişim Hizmetleri İş Yönlendiricisi'nin tüm özellikleri hakkında bilgi edinin.

Önkoşullar

Örnek kod

GitHub'da bu hızlı başlangıç için örnek kodu gözden geçirebilir ve indirebilirsiniz.

Ayarlama

Yeni java uygulaması oluşturma

Bir konsol penceresinde (cmd, PowerShell veya Bash gibi), adlı router-quickstartyeni bir konsol uygulaması oluşturmak için aşağıdaki komutu kullanınmvn. Bu komut, tek bir kaynak dosyası olan basit bir "Merhaba Dünya" Java projesi oluşturur: App.java.

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

Paketi dahil et

Java sürüm 1.0.0 veya üzeri için Azure İletişim İş Yönlendiricisi istemci kitaplığını kullanmanız gerekir.

BOM dosyasını dahil et

Kitaplığın azure-sdk-bom Genel Kullanılabilirlik (GA) sürümüne bağımlılık almak için projenize öğesini ekleyin. Aşağıdaki kod parçacığında {bom_version_to_target} yer tutucusunun yerine sürüm numarasını yazın. Ürün reçetesi hakkında daha fazla bilgi edinmek için bkz . Azure SDK ÜRÜN REÇETESI benioku.

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

ve ardından doğrudan bağımlılığı sürüm etiketi olmadan bağımlılıklar bölümüne ekleyin.

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

Doğrudan bağımlılığı dahil et

Kitaplığın ürün reçetesinde bulunmayan belirli bir sürümüne bağımlılığı almak istiyorsanız, doğrudan bağımlılığı projenize aşağıdaki gibi ekleyin.

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

Uygulama çerçevesini ayarlama

/src/main/java/com/communication/quickstart dizinine App.java gidin ve dosyayı açın. Şu kodu ekleyin:

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

İş Yönlendiricisi istemcisini ve yönetim istemcisini başlatma

İş Yönlendiricisi istemcilerinin kimliği, Azure portalındaki bir Azure İletişim Hizmetleri kaynağından alınan bağlantı dizesi kullanılarak doğrulanabilir. İş Yönlendiricisi hizmetiyle etkileşime geçmek için hem bir istemci hem de bir yönetim istemcisi oluşturuyoruz. Yönetici istemcisi kuyrukları ve ilkeleri sağlamak için kullanılırken, istemci işleri göndermek ve çalışanları kaydetmek için kullanılır. bağlantı dizesi hakkında daha fazla bilgi için bkz. 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();

Dağıtım ilkesi oluşturma

İş Yönlendiricisi, Çalışanlara kullanılabilir İşler hakkında nasıl bildirim ve bildirimler için yaşam süresi (Teklifler olarak bilinir) bildirileceğine karar vermek için bir dağıtım ilkesi kullanır. Kimlik, ad, offerExpiresAfter ve dağıtım modunu belirterek ilkeyi oluşturun.

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

Kuyruk oluştur

Bir kimlik, ad belirterek Kuyruk oluşturun ve yukarıda oluşturduğunuz Dağıtım İlkesi nesnesinin kimliğini belirtin.

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

İş gönderme

Şimdi, çalışanın etiketi Some-Skill 10'dan büyük olmasını gerektiren bir çalışan seçicisi ile doğrudan bu kuyruğa bir iş gönderebiliriz.

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

Çalışan oluşturma

Şimdi bu kuyruktan iş almak için 11'e eşit etikete Some-Skill ve üzerinde my-channelkapasiteye sahip bir çalışan oluşturuyoruz.

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

Teklif alma

Event Grid aboneliğimizden RouterWorkerOfferIssuedalmalıyız. Ancak birkaç saniye bekleyebilir ve ardından bir teklif yayımlanıp sunulmadığını görmek için çalışanı doğrudan JobRouter API'sine karşı sorgulayabiliriz.

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

İş teklifini kabul etme

Ardından çalışan, işi çalışana atayan SDK'yı kullanarak iş teklifini kabul edebilir.

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

İşi tamamlama

Çalışan işle ilişkili çalışmayı tamamladıktan sonra (örneğin, aramayı tamamladıktan) sonra işi tamamlarız.

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

İşi kapatma

Çalışan yeni işleri almaya hazır olduğunda, çalışanın işi kapatması gerekir.

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

İşi silme

İş kapatıldıktan sonra, bu örneği yeniden çalıştırırsak işi aynı kimlikle yeniden oluşturabilmek için işi silebiliriz

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

Kodu çalıştırma

Kodu çalıştırmak için dosyayı içeren pom.xml dizine gidin ve programı derleyin.

mvn compile

Ardından paketi derleyin:

mvn package

Uygulamayı yürütme

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

Beklenen çıkış, tamamlanan her eylemi açıklar:

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

Dekont

Uygulamayı birden çok kez çalıştırmak, her seferinde yeni bir İşin kuyruğa yerleştirilmesine neden olur. Bu, çalışana yukarıdaki kodu çalıştırdığınızda oluşturulandan başka bir İş teklif edilmesine neden olabilir. Bu, isteğinizi çarpıtabileceği için kuyruktaki İşleri her seferinde silmeyi göz önünde bulundurun. Kuyruk veya İş yönetimi için SDK belgelerine bakın.

Başvuru belgeleri

Java SDK başvurusundan veya REST API başvurusundan Azure İletişim Hizmetleri İş Yönlendiricisi'nin tüm özellikleri hakkında bilgi edinin.

Sonraki Adımlar

İş Yönlendiricisi Nasıl Yapılır öğreticilerini keşfedin