Поделиться через


Краткое руководство. Отправка задания для постановки в очередь и маршрутизации

Начните работу с маршрутизатором заданий Службы коммуникации Azure, настроив клиент, а затем настроив основные функциональные возможности, такие как очереди, политики, рабочие роли и задания. Дополнительные сведения о концепциях маршрутизаторов заданий см. в этой документации.

Необходимые компоненты

Пример кода

Вы можете просмотреть и скачать пример кода для этого краткого запуска на сайте GitHub.

Установка

Создание нового приложения C#

В окне консоли (cmd, PowerShell или Bash) выполните команду dotnet new, чтобы создать консольное приложение с именем JobRouterQuickstart. Эта команда создает простой проект "Hello World" на языке C# с одним файлом исходного кода Program.cs.

dotnet new console -o JobRouterQuickstart

Измените каталог на только что созданную папку приложения и выполните команду dotnet build, чтобы скомпилировать приложение.

cd JobRouterQuickstart
dotnet build

Установка пакета

Установите клиентную библиотеку маршрутизатора заданий коммуникации Azure для .NET с помощью NuGet:

dotnet add package Azure.Communication.JobRouter

Вам потребуется использовать клиентскую библиотеку маршрутизатора заданий коммуникации Azure для .NET версии 1.0.0 или более поздней.

Добавьте приведенные ниже директивы using в начало Program.cs, чтобы добавить пространства имен JobRouter.

using Azure.Communication.JobRouter;

Инициализация клиента маршрутизатора заданий и клиента администрирования

Клиенты маршрутизаторов заданий могут проходить проверку подлинности с помощью строки подключения, полученной из ресурса Служб коммуникации Azure, на портале Azure. Мы создадим как клиент, так и клиент администрирования для взаимодействия со службой маршрутизатора заданий. Клиент администратора используется для подготовки очередей и политик, а клиент используется для отправки заданий и регистрации рабочих ролей. Дополнительные сведения о строка подключения см. в разделе 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");

Создание политики распределения

Маршрутизатор заданий использует политику распределения, чтобы определить, как рабочие роли должны получать уведомления о доступных заданиях, а также о сроке жизни для уведомлений, известных как предложения. Создайте политику, указав идентификатор, имя, предложениеExpiresAfter и режим распространения.

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

Создать очередь

Создайте очередь, указав идентификатор, имя. Укажите идентификатор объекта Политика распределения, созданный ранее.

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

Отправка задания

Теперь мы можем отправить задание непосредственно в эту очередь с селектором рабочей роли, который требует от рабочей роли иметь метку Some-Skill больше 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))
        }
    });

Создание рабочей роли

Теперь мы создадим рабочую роль для получения работы из этой очереди с меткой Some-Skill равной 11 и емкости 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
    });

Получение предложения

Мы должны получить маршрутизаторWorkerOfferIssued из нашей подписки сетки событий. Однако мы также можем подождать несколько секунд, а затем запросить рабочую роль непосредственно к API JobRouter, чтобы узнать, было ли предложение выдано ему.

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

Примите предложение о задании

Затем работник может принять предложение задания с помощью пакета SDK, который назначает задание рабочей роли.

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

Завершение задания

После завершения работы, связанной с заданием (например, завершения вызова), мы завершим задание.

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

Закройте задание

После того как работник будет готов к новым заданиям, работник должен закрыть задание. Кроме того, работник может предоставить код ликвидации, чтобы указать результат задания.

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

Удаление задания

После закрытия задания можно удалить задание, чтобы повторно создать задание с таким же идентификатором, если снова запустить этот пример.

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

Выполнение кода

Запустите приложение с помощью dotnet run и проверьте результаты.

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

Примечание.

Если запустить приложение несколько раз, новое задание будет помещаться в очередь каждый раз. Это может привести к тому, что рабочей роли будет предложено задание, отличное от того, которое было создано при выполнении приведенного выше кода. Так как это может изменить ваш запрос, учитывая удаление заданий в очереди каждый раз. Дополнительные сведения см. в документации по пакету SDK для управления очередью или заданием.

Справочная документация

Ознакомьтесь с полным набором возможностей маршрутизатора заданий Службы коммуникации Azure из справочника по пакету SDK для .NET или справочнике по REST API.

Необходимые компоненты

Пример кода

Вы можете просмотреть и скачать пример кода для этого краткого запуска на сайте GitHub.

Установка

Создание веб-приложения

В окне терминала или консоли создайте новую папку для приложения и перейдите к ней.

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

Выполните команду npm init , чтобы создать файл package.json с параметрами по умолчанию.

npm init -y

Создайте новый файл index.js , в котором вы добавите код для этого краткого руководства.

Установка пакетов

Вам потребуется использовать клиентскую библиотеку маршрутизатора заданий коммуникации Azure для JavaScript версии 1.0.0 или более поздней.

Используйте команду npm install, чтобы установить указанные ниже пакеты SDK Служб коммуникации для JavaScript.

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

Настройка платформы приложения

Добавьте в файл index.js указанный ниже код. Мы добавим код для краткого руководства в 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);
})

Инициализация клиента маршрутизатора заданий

Клиенты маршрутизаторов заданий могут проходить проверку подлинности с помощью строки подключения, полученной из ресурса Служб коммуникации Azure, на портале Azure. Мы создадим клиент для взаимодействия со службой маршрутизатора заданий. Дополнительные сведения о строка подключения см. в разделе access-your-connection-strings-and-service-endpoints.

Добавьте следующий код в index.js функцию main .

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

Создание политики распределения

Маршрутизатор заданий использует политику распространения, чтобы решить, как работники уведомляются о доступных заданиях и времени жизни для уведомлений, известных как предложения. Создайте политику, указав идентификатор, имя, предложениеExpiresAfterSeconds и режим распространения.

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

Создать очередь

Создайте очередь, указав идентификатор, имя. Укажите идентификатор объекта Политика распределения, созданный ранее.

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

Отправка задания

Теперь мы можем отправить задание непосредственно в эту очередь с селектором рабочей роли, который требует от рабочей роли иметь метку Some-Skill больше 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"
});

Создание рабочей роли

Теперь мы создадим рабочую роль для получения работы из этой очереди с меткой Some-Skill равной 11 и емкости 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"
});

Получение предложения

Мы должны получить маршрутизаторWorkerOfferIssued из нашей подписки сетки событий. Однако мы также можем подождать несколько секунд, а затем запросить рабочую роль непосредственно к API JobRouter, чтобы узнать, было ли предложение выдано ему.

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

Примите предложение о задании

Затем работник может принять предложение задания с помощью пакета SDK, который назначает задание рабочей роли.

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

Завершение задания

После завершения работы, связанной с заданием (например, завершения вызова), мы завершим задание.

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

Закройте задание

После того как работник будет готов к новым заданиям, работник должен закрыть задание. Кроме того, работник может предоставить код ликвидации, чтобы указать результат задания.

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

Удаление задания

После закрытия задания можно удалить задание, чтобы повторно создать задание с таким же идентификатором, если снова запустить этот пример.

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

Выполнение кода

Чтобы запустить код, убедитесь, что вы находитесь в каталоге, где index.js находится файл.

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

Примечание.

Если запустить приложение несколько раз, новое задание будет помещаться в очередь каждый раз. Это может привести к тому, что рабочей роли будет предложено задание, отличное от того, которое было создано при выполнении приведенного выше кода. Так как это может изменить ваш запрос, учитывая удаление заданий в очереди каждый раз. Дополнительные сведения см. в документации по пакету SDK для управления очередью или заданием.

Справочная документация

Ознакомьтесь с полным набором возможностей маршрутизатора заданий Службы коммуникации Azure из справочника по пакету SDK JavaScript или справочнике по REST API.

Необходимые компоненты

Пример кода

Вы можете просмотреть и скачать пример кода для этого краткого запуска на сайте GitHub.

Установка

Создание приложения Python

В окне терминала или консоли создайте новую папку для приложения и перейдите к ней.

mkdir jobrouter-quickstart && cd jobrouter-quickstart

Установка пакета

Вам потребуется использовать клиентскую библиотеку маршрутизатора заданий коммуникации Azure для Python версии 1.0.0 или более поздней.

В командной строке консоли выполните следующую команду:

pip install azure-communication-jobrouter

Настройка платформы приложения

Создайте новый файл с именем router-quickstart.py и добавьте базовую структуру программы.

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

Инициализация клиента маршрутизатора заданий и клиента администрирования

Клиенты маршрутизаторов заданий могут проходить проверку подлинности с помощью строки подключения, полученной из ресурса Служб коммуникации Azure, на портале Azure. Мы создадим как клиент, так и клиент администрирования для взаимодействия со службой маршрутизатора заданий. Клиент администратора используется для подготовки очередей и политик, а клиент используется для отправки заданий и регистрации рабочих ролей. Дополнительные сведения о строка подключения см. в разделе 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")

Создание политики распределения

Маршрутизатор заданий использует политику распределения, чтобы определить, как рабочие роли должны получать уведомления о доступных заданиях, а также о сроке жизни для уведомлений, известных как предложения. Создайте политику, указав distribution_policy_id, имя, значение offer_expires_after_seconds и режим распространения.

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

Создать очередь

Создайте очередь, указав идентификатор, имя. Укажите идентификатор объекта Политика распределения, созданный ранее.

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

Отправка задания

Теперь мы можем отправить задание непосредственно в эту очередь с селектором рабочей роли, который требует от рабочей роли иметь метку Some-Skill больше 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
        )
    ])

Создание рабочей роли

Теперь мы создадим рабочую роль для получения работы из этой очереди с меткой Some-Skill равной 11 и емкости 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
)

Получение предложения

Мы должны получить маршрутизаторWorkerOfferIssued из нашей подписки сетки событий. Однако мы также можем подождать несколько секунд, а затем запросить рабочую роль непосредственно к API JobRouter, чтобы узнать, было ли предложение выдано ему.

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

Примите предложение о задании

Затем работник может принять предложение задания с помощью пакета SDK, который назначает задание рабочей роли.

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

Завершение задания

После завершения работы, связанной с заданием (например, завершения вызова), мы завершим задание.

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

Закройте задание

После того как работник будет готов к новым заданиям, работник должен закрыть задание. Кроме того, работник может предоставить код ликвидации, чтобы указать результат задания.

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

Удаление задания

После закрытия задания можно удалить задание, чтобы повторно создать задание с таким же идентификатором, если снова запустить этот пример.

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

Выполнение кода

Чтобы запустить код, убедитесь, что вы находитесь в каталоге, где router-quickstart.py находится файл.

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

Примечание.

Если запустить приложение несколько раз, новое задание будет помещаться в очередь каждый раз. Это может привести к тому, что рабочей роли будет предложено задание, отличное от того, которое было создано при выполнении приведенного выше кода. Так как это может изменить ваш запрос, учитывая удаление заданий в очереди каждый раз. Дополнительные сведения см. в документации по пакету SDK для управления очередью или заданием.

Справочная документация

Ознакомьтесь с полным набором возможностей маршрутизатора заданий Службы коммуникации Azure из справочника по пакету SDK для Python или справочнике по REST API.

Необходимые компоненты

Пример кода

Вы можете просмотреть и скачать пример кода для этого краткого запуска на сайте GitHub.

Установка

Создание нового приложения Java

В окне консоли (например, cmd, PowerShell или Bash) используйте следующую mvn команду, чтобы создать новое консольное приложение с именем router-quickstart. Эта команда создает простой проект Java Hello World с одним исходным файлом: App.java.

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

Включение пакета

Вам потребуется использовать клиентскую библиотеку маршрутизатора заданий коммуникации Azure для Java версии 1.0.0 или более поздней.

Включение BOM-файла

Включите в azure-sdk-bom проект зависимость от общедоступной версии библиотеки. В следующем фрагменте кода замените заполнитель {bom_version_to_target} номером версии. Дополнительные сведения о BOM см. в читаемом средстве BOM пакета SDK Azure.

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

затем включите прямую зависимость в раздел зависимостей без тега версии.

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

Включение прямой зависимости

Если вы хотите взять зависимость от определенной версии библиотеки, которая отсутствует в BOM, добавьте прямую зависимость в проект следующим образом.

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

Настройка платформы приложений

Перейдите в каталог /src/main/java/com/communication/quickstart и откройте App.java файл. Добавьте следующий код:

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

Инициализация клиента маршрутизатора заданий и клиента администрирования

Клиенты маршрутизаторов заданий могут проходить проверку подлинности с помощью строки подключения, полученной из ресурса Служб коммуникации Azure, на портале Azure. Мы создадим как клиент, так и клиент администрирования для взаимодействия со службой маршрутизатора заданий. Клиент администратора используется для подготовки очередей и политик, а клиент используется для отправки заданий и регистрации рабочих ролей. Дополнительные сведения о строка подключения см. в разделе 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();

Создание политики распределения

Маршрутизатор заданий использует политику распределения, чтобы определить, как рабочие роли должны получать уведомления о доступных заданиях, а также о сроке жизни для уведомлений, известных как предложения. Создайте политику, указав идентификатор, имя, предложениеExpiresAfter и режим распространения.

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

Создать очередь

Создайте очередь, указав идентификатор, имя. Укажите идентификатор объекта Политика распределения, созданный ранее.

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

Отправка задания

Теперь мы можем отправить задание непосредственно в эту очередь с селектором рабочей роли, который требует от рабочей роли иметь метку Some-Skill больше 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)))));

Создание рабочей роли

Теперь мы создадим рабочую роль для получения работы из этой очереди с меткой Some-Skill равной 11 и емкости 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))));

Получение предложения

Мы должны получить маршрутизаторWorkerOfferIssued из нашей подписки сетки событий. Однако мы также можем подождать несколько секунд, а затем запросить рабочую роль непосредственно к API JobRouter, чтобы узнать, было ли предложение выдано ему.

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

Примите предложение о задании

Затем работник может принять предложение задания с помощью пакета SDK, который назначает задание рабочей роли.

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

Завершение задания

После завершения работы, связанной с заданием (например, завершения вызова), мы завершим задание.

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

Закройте задание

После того как работник будет готов к новым заданиям, работник должен закрыть задание.

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

Удаление задания

После закрытия задания можно удалить задание, чтобы повторно создать задание с таким же идентификатором, если снова запустить этот пример.

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

Выполнение кода

Чтобы запустить код, перейдите в каталог, содержащий pom.xml файл и скомпилируйте программу.

mvn compile

Затем создайте пакет:

mvn package

Выполнение приложения

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

Ожидаемые выходные данные описывают каждое завершенное действие:

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

Примечание.

Если запустить приложение несколько раз, новое задание будет помещаться в очередь каждый раз. Это может привести к тому, что рабочей роли будет предложено задание, отличное от того, которое было создано при выполнении приведенного выше кода. Так как это может изменить ваш запрос, учитывая удаление заданий в очереди каждый раз. Дополнительные сведения см. в документации по пакету SDK для управления очередью или заданием.

Справочная документация

Ознакомьтесь с полным набором возможностей маршрутизатора заданий Службы коммуникации Azure из справочника по пакету SDK для Java или справочнике по REST API.

Next Steps

Ознакомьтесь с руководствами по работе с маршрутизатором заданий