快速入门:使用 .NET Durable Task SDK 进行工作项筛选

本快速入门将介绍如何运行一个 .NET Durable Task SDK 示例,该示例使用工作项筛选功能来将任务流和活动路由到专用的工作角色。

  • 设置并运行 Durable Task Scheduler 模拟器进行本地开发。
  • 运行 Orchestrator、验证器工作程序、传输器工作程序,以及客户端。
  • 验证工作项是否仅路由到匹配的工作人员。
  • 使用 Azure 开发人员 CLI 将示例部署到 Azure 容器应用。

先决条件

开始之前:

准备项目

Azure-Samples/Durable-Task-Scheduler 根目录导航到示例目录:

cd samples/scenarios/WorkItemFilteringSplitActivities

使用模拟器在本地运行

  1. 拉取模拟器映像:

    docker pull mcr.microsoft.com/dts/dts-emulator:latest
    
  2. 运行模拟器:

    docker run -d --name dts-emulator -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:latest
    
  3. 生成示例:

    dotnet build
    
  4. 在单独的终端中运行每个工作进程。

    终端 1 - Orchestrator 工作单元

    dotnet run --project src/OrchestratorWorker
    

    终端 2 - 验证器工作者

    dotnet run --project src/ValidatorWorker
    

    终端 3 - 装运工

    dotnet run --project src/ShipperWorker
    
  5. 在第四个终端中,运行客户端:

    dotnet run --project src/Client
    
  6. http://localhost:8082打开模拟仪表板以监控编排活动。

预期输出

你应该会看到:

  • 客户端编排批次计划并等待完成。
  • Orchestrator 工作器分派 ValidateOrderShipOrder 活动调用。
  • 验证程序工作者仅处理 ValidateOrder 活动工作项。
  • 仅处理 ShipOrder 活动工作项的发货工人。

此行为证实,工作项筛选仅将项目路由到登记了符合任务类型的工作人员。

使用 Azure 开发人员 CLI 进行部署

  1. samples/scenarios/WorkItemFilteringSplitActivities中运行:

    azd up
    
  2. 在终端中出现提示时,请提供以下参数:

    参数 Description
    环境名称 为保存所有 Azure 资源而创建的资源组的前缀。
    Azure 位置 您资源的 Azure 位置。
    Azure订阅 用于您的资源的 Azure 订阅。

azd up 命令预配 Azure 资源,并从此示例部署四个容器化服务:客户端、业务流程协调程序辅助角色、验证程序辅助角色和发货人。

确认部署是否成功

  1. azd up 的输出中,复制资源组名称。

  2. Azure 门户中,打开该资源组。

  3. 对于每个已部署的容器应用(client、、orchestrator-workervalidator-workershipper-worker),打开监视>日志流

  4. 验证每个应用仅记录其预期工作项:

    • orchestrator-worker:编排工作。
    • validator-workerValidateOrder 活动。
    • shipper-workerShipOrder 活动。

了解数据

编排按顺序调用两个活动。 计划程序将每个活动工作项路由到注册它的工作者。

public override async Task<string> RunAsync(TaskOrchestrationContext context, string orderId)
{
    string validationResult = await context.CallActivityAsync<string>("ValidateOrder", orderId);
    string shippingResult = await context.CallActivityAsync<string>("ShipOrder", orderId);

    return $"Order '{orderId}' => Validation: [{validationResult}], Shipping: [{shippingResult}]";
}

每个工作者仅注册其本地任务。 SDK 从任务注册表生成工作项筛选器。

builder.Services.AddDurableTaskWorker()
    .AddTasks(registry =>
    {
        registry.AddAllGeneratedTasks();
    })
    .UseDurableTaskScheduler(connectionString);

例如:

  • OrchestratorWorker 寄存器 OrderProcessingOrchestration.
  • ValidatorWorker 寄存器 ValidateOrder.
  • ShipperWorker 寄存器 ShipOrder.

由于筛选器派生自注册,因此工作人员不会收到与注册筛选器不匹配的工作项类型。

清理资源

  1. 停止本地模拟器容器:

    docker rm -f dts-emulator
    
  2. 如果部署到Azure,请标识资源组名称:

    • 把它从 azd up 输出中复制。
    • 或在 Azure 门户中,使用顶部的全局搜索框,搜索 rg- 或环境名称前缀。
  3. 从搜索结果中打开资源组。

  4. 选择 “删除资源组”,输入要确认的资源组名称,然后选择“ 删除”。

后续步骤