透過設定用戶端,然後設定佇列、原則、背景工作角色和作業等核心功能,以開始使用 Azure 通訊服務工作路由器。 若要深入了解工作路由器概念,請瀏覽工作路由器概念文件
必要條件
- 具有有效訂用帳戶的 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
Install the package
使用 NuGet (英文) 安裝適用於 .NET 的 Azure 通訊工作路由器用戶端程式庫:
dotnet add package Azure.Communication.JobRouter
您必須使用適用於 .NET 的 Azure 通訊工作路由器用戶端程式庫 1.0.0 版 (英文) 或更新版本。
將下列 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");
建立散發原則
工作路由器會使用散發原則來決定背景工作角色將如何收到可用作業的通知,以及該通知的存留時間,此通知稱為供應項目。 透過指定識別碼、名稱、offerExpiresAfter,以及散發模式來建立原則。
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"
});
提交作業
現在,我們可以將作業直接提交至該佇列,並搭配要求背景工作角色具有大於 10 之 Some-Skill
標籤的背景工作角色選取器。
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))
}
});
建立背景工作角色
現在,我們會建立背景工作角色來接收來自該佇列的工作,並使該背景工作角色具有等於 11 的 Some-Skill
標籤,以及位於 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 接受作業供應項目,其會將作業指派給背景工作角色。
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 文件。
參考文件
請從 .NET SDK 參考 (英文) 或 REST API 參考 (部分機器翻譯) 參閱 Azure 通訊服務工作路由器的完整功能集。
必要條件
範例指令碼
您可以在 GitHub (英文) 上檢閱並下載此快速入門的範例程式碼。
設定
建立新的 Web 應用程式
在終端或主控台視窗中,為您的應用程式建立新資料夾並瀏覽至該資料夾。
mkdir acs-router-quickstart && cd acs-router-quickstart
執行 npm init
以建立具有預設設定的 package.json 檔案。
npm init -y
建立新檔案 index.js
,您將在其中新增本快速入門的程式碼。
安裝套件
您必須使用適用於 JavaScript 的 Azure 通訊工作路由器用戶端程式庫 1.0.0 版 (英文) 或更新版本。
使用 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 通訊服務資源取得的連接字串進行驗證。 我們會產生用戶端來與工作路由器服務互動。 如需連接字串的詳細資訊,請參閱存取您的連接字串和服務端點 (部分機器翻譯)。
在 main
函式內的 index.js
中新增下列程式碼。
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] ||
"endpoint=https://<resource-name>.communication.azure.com/;<access-key>";
const client = JobRouterClient(connectionString);
建立散發原則
工作路由器會使用散發原則來決定背景工作角色如何收到可用作業的通知,以及該通知的存留時間,此通知稱為供應項目。 透過指定識別碼、名稱、offerExpiresAfterSeconds,以及散發模式來建立原則。
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"
});
提交作業
現在,我們可以將作業直接提交至該佇列,並搭配要求背景工作角色具有大於 10 之 Some-Skill
標籤的背景工作角色選取器。
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"
});
建立背景工作角色
現在,我們會建立背景工作角色來接收來自該佇列的工作,並使該背景工作角色具有等於 11 的 Some-Skill
標籤,以及位於 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 接受作業供應項目,其會將作業指派給背景工作角色。
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 文件。
參考文件
請從 JavaScript SDK 參考 (部分機器翻譯) 或 REST API 參考 (部分機器翻譯) 參閱 Azure 通訊服務工作路由器的完整功能集。
必要條件
範例指令碼
您可以在 GitHub (英文) 上檢閱並下載此快速入門的範例程式碼。
設定
建立新的 Python 應用程式
在終端或主控台視窗中,為您的應用程式建立新資料夾並瀏覽至該資料夾。
mkdir jobrouter-quickstart && cd jobrouter-quickstart
Install the package
您必須使用適用於 Python 的 Azure 通訊工作路由器用戶端程式庫 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 通訊服務資源取得的連接字串進行驗證。 我們同時產生用戶端和系統管理用戶端,以與工作路由器服務互動。 系統管理用戶端是用來佈建佇列和原則,而用戶端則是用來提交作業和註冊背景工作角色。 如需連接字串的詳細資訊,請參閱存取您的連接字串和服務端點 (部分機器翻譯)。
# 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)
提交作業
現在,我們可以將作業直接提交至該佇列,並搭配要求背景工作角色具有大於 10 之 Some-Skill
標籤的背景工作角色選取器。
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
)
])
建立背景工作角色
現在,我們會建立背景工作角色來接收來自該佇列的工作,並使該背景工作角色具有等於 11 的 Some-Skill
標籤,以及位於 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 接受作業供應項目,其會將作業指派給背景工作角色。
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 文件。
參考文件
請從 Python SDK 參考 (部分機器翻譯) 或 REST API 參考 (部分機器翻譯) 參閱 Azure 通訊服務工作路由器的完整功能集。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 作用中的 Azure 通訊服務資源和連接字串。 建立通訊服務資源。
- Java Development Kit (JDK) 第 8 版或更新版本。
- Apache Maven
範例指令碼
您可以在 GitHub (英文) 上檢閱並下載此快速入門的範例程式碼。
設定
建立新的 Java 應用程式
在主控台視窗中 (例如 cmd、PowerShell 或 Bash),使用下列 mvn
命令建立名為 router-quickstart
的新主控台應用程式。 此命令會建立簡單的 "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 的 Azure 通訊工作路由器用戶端程式庫 1.0.0 版 (英文) 或更新版本。
包括 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();
建立散發原則
工作路由器會使用散發原則來決定背景工作角色將如何收到可用作業的通知,以及該通知的存留時間,此通知稱為供應項目。 透過指定識別碼、名稱、offerExpiresAfter,以及散發模式來建立原則。
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")
);
提交作業
現在,我們可以將作業直接提交至該佇列,並搭配要求背景工作角色具有大於 10 之 Some-Skill
標籤的背景工作角色選取器。
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)))));
建立背景工作角色
現在,我們會建立背景工作角色來接收來自該佇列的工作,並使該背景工作角色具有等於 11 的 Some-Skill
標籤,以及位於 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 接受作業供應項目,其會將作業指派給背景工作角色。
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 文件。
參考文件
請從 Java SDK 參考 (部分機器翻譯) 或 REST API 參考 (部分機器翻譯) 參閱 Azure 通訊服務工作路由器的完整功能集。
後續步驟
探索工作路由器操作說明的教學課程