Краткое руководство. Отправка задания для постановки в очередь и маршрутизации
Начните работу с маршрутизатором заданий Службы коммуникации Azure, настроив клиент, а затем настроив основные функциональные возможности, такие как очереди, политики, рабочие роли и задания. Дополнительные сведения о концепциях маршрутизаторов заданий см. в этой документации.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Активный ресурс Служб коммуникации и строка подключения. Создайте ресурс Служб коммуникации.
- Последняя версия клиентской библиотеки .NET для операционной системы.
Пример кода
Вы можете просмотреть и скачать пример кода для этого краткого запуска на сайте 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.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Активный ресурс Служб коммуникации и строка подключения. Создайте ресурс Служб коммуникации.
- Последние версии Node.js Active LTS и обслуживания LTS.
Пример кода
Вы можете просмотреть и скачать пример кода для этого краткого запуска на сайте 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.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Активный ресурс Служб коммуникации и строка подключения. Создайте ресурс Служб коммуникации.
- Python 3.7+ для операционной системы.
Пример кода
Вы можете просмотреть и скачать пример кода для этого краткого запуска на сайте 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.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Активный ресурс Служб коммуникации и строка подключения. Создайте ресурс Служб коммуникации.
- комплект SDK для Java (JDK) версии 8 или более поздней версии.
- Apache Maven
Пример кода
Вы можете просмотреть и скачать пример кода для этого краткого запуска на сайте 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
Ознакомьтесь с руководствами по работе с маршрутизатором заданий
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по