你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:提交作业以进行排队和路由

通过设置客户端,然后配置队列、策略、辅助角色和作业等核心功能,开始使用 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

安装包

使用 NuGet 安装适用于 .NET 的 Azure 通信作业路由器客户端库:

dotnet add package Azure.Communication.JobRouter

需要使用适用于 .NET 版本 1.0.0 或更高版本的 Azure 通信作业路由器客户端库。

将以下 using 指令添加到 Program.cs 的顶部,以包含 JobRouter 命名空间。

using Azure.Communication.JobRouter;

初始化作业路由器客户端和管理客户端

作业路由器客户端可以使用从 Azure 门户中的 Azure 通信服务资源获取的连接字符串进行身份验证。 我们生成一个客户端和管理客户端来与作业路由器服务交互。 管理客户端用于预配队列和策略,而客户端用于提交作业和注册辅助角色。 有关连接字符串的详细信息,请参阅访问连接字符串和服务终结点

// Get a connection string to our Azure Communication Services resource.
var routerAdminClient = new JobRouterAdministrationClient("your_connection_string");
var routerClient = new JobRouterClient("your_connection_string");

创建分发策略

作业路由器使用分发策略来决定如何通知辅助角色可用的作业以及通知的生存时间(称为产品/服务)。 通过指定 ID、名称、offerExpiresAfter 和分发模式来创建策略。

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

创建队列

通过指定 ID 和名称来创建队列,并提供先前创建的分发策略对象的 ID 。

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

接收产品/服务

我们应该会从事件网格订阅获得一个 RouterWorkerOfferIssued。 但是,我们也可以等待几秒钟,然后直接针对 JobRouter API 查询辅助角色,以查看是否向其发出了聘约。

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 接受作业产品/服务,该 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}");

删除作业

关闭作业后,可以删除该作业,以便再次运行此示例时,可以使用同一 ID 重新创建作业

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 通信服务作业路由器的完整功能集,可阅读 .NET SDK 参考REST API 参考

先决条件

代码示例

可以在 GitHub 上查看并下载本快速入门的示例代码。

设置

新建 Web 应用程序

在终端或控制台窗口中,为应用程序创建一个新文件夹并导航到它。

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

运行 npm init 以使用默认设置创建 package.json 文件。

npm init -y

创建一个新文件 index.js,你将在这里添加此快速入门的代码。

安装包

需要使用适用于 JavaScript 版本 1.0.0 或更高版本的 Azure 通信作业路由器客户端库。

使用 npm install 命令安装适用于 JavaScript 的以下通信服务 SDK。

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 通信服务资源获取的连接字符串进行身份验证。 我们生成一个客户端来与作业路由器服务交互。 有关连接字符串的详细信息,请参阅访问连接字符串和服务终结点

index.js 函数内的 main 中添加以下代码。

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

创建分发策略

作业路由器使用分发策略来决定如何将可用作业和通知生存时间(称为产品/服务)通知给辅助角色。 通过指定 Id、name、offerExpiresAfterSeconds 和分发 mode 来创建策略。

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

创建队列

通过指定 ID 和名称来创建队列,并提供先前创建的分发策略对象的 ID 。

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

接收产品/服务

我们应该会从事件网格订阅获得一个 RouterWorkerOfferIssued。 但是,我们也可以等待几秒钟,然后直接针对 JobRouter API 查询辅助角色,以查看是否向其发出了聘约。

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 接受作业产品/服务,该 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}`);

删除作业

关闭作业后,可以删除该作业,以便再次运行此示例时,可以使用同一 ID 重新创建作业

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 通信服务作业路由器的完整功能集,可阅读 JavaScript SDK 参考REST API 参考

先决条件

代码示例

可以在 GitHub 上查看并下载本快速入门的示例代码。

设置

创建新的 Python 应用程序

在终端或控制台窗口中,为应用程序创建一个新文件夹并导航到它。

mkdir jobrouter-quickstart && cd jobrouter-quickstart

安装包

需要使用适用于 Python 版本 1.0.0 或更高版本的 Azure 通信作业路由器客户端库。

从控制台指示符中,执行以下命令:

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 通信服务资源获取的连接字符串进行身份验证。 我们生成一个客户端和管理客户端来与作业路由器服务交互。 管理客户端用于预配队列和策略,而客户端用于提交作业和注册辅助角色。 有关连接字符串的详细信息,请参阅访问连接字符串和服务终结点

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

创建队列

通过指定 ID 和名称来创建队列,并提供先前创建的分发策略对象的 ID 。

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
)

接收产品/服务

我们应该会从事件网格订阅获得一个 RouterWorkerOfferIssued。 但是,我们也可以等待几秒钟,然后直接针对 JobRouter API 查询辅助角色,以查看是否向其发出了聘约。

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 接受作业产品/服务,该 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}")

删除作业

关闭作业后,可以删除该作业,以便再次运行此示例时,可以使用同一 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 通信服务作业路由器的完整功能集,可阅读 Python SDK 参考REST API 参考

先决条件

代码示例

可以在 GitHub 上查看并下载本快速入门的示例代码。

设置

创建新的 Java 应用程序

在控制台窗口(例如 cmd、PowerShell 或 Bash)中,使用以下 mvn 命令创建名为 router-quickstart 的新控制台应用。 此命令将创建包含单个源文件 (Program.cs) 的简单“Hello World”Java 项目:App.java。

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

添加包

需要使用适用于 Java 版本 1.0.0 或更高版本的 Azure 通信作业路由器客户端库。

包括 BOM 文件

azure-sdk-bom 包含在你的项目中以依赖于库的通用 (GA) 版本。 在以下代码段中,将 {bom_version_to_target} 占位符替换为版本号。 若要了解有关 BOM 的详细信息,请参阅 Azure SDK BOM 自述文件

<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 通信服务资源获取的连接字符串进行身份验证。 我们生成一个客户端和管理客户端来与作业路由器服务交互。 管理客户端用于预配队列和策略,而客户端用于提交作业和注册辅助角色。 有关连接字符串的详细信息,请参阅访问连接字符串和服务终结点

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

创建分发策略

作业路由器使用分发策略来决定如何通知辅助角色可用的作业以及通知的生存时间(称为产品/服务)。 通过指定 ID、名称、offerExpiresAfter 和分发模式来创建策略。

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

创建队列

通过指定 ID 和名称来创建队列,并提供先前创建的分发策略对象的 ID 。

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

接收产品/服务

我们应该会从事件网格订阅获得一个 RouterWorkerOfferIssued。 但是,我们也可以等待几秒钟,然后直接针对 JobRouter API 查询辅助角色,以查看是否向其发出了聘约。

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 接受作业产品/服务,该 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());

删除作业

关闭作业后,可以删除该作业,以便再次运行此示例时,可以使用同一 ID 重新创建作业

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 通信服务作业路由器的完整功能集,可阅读 Java SDK 参考REST API 参考

后续步骤

浏览作业路由器操作指南教程