.NET SDK 中的多应用程序工作流
使用 .NET SDK 调用托管在其他 Dapr 应用程序中的活动和子工作流
概述
Dapr 工作流可以调用托管在不同 Dapr 应用程序中的活动或子工作流。在 .NET 中,多应用程序工作流的支持从以下版本开始:
- Dapr 运行时 v1.16.0+
- Dapr .NET SDK v1.17.0+
概念性指导和约束在 多应用程序工作流 中介绍。
要求
多应用程序工作流调用需要:
- 目标应用 ID 必须存在,并且必须注册你调用的活动或工作流。
- 所有参与的应用 ID 必须位于同一命名空间中。
- 所有参与的应用 ID 必须使用相同的工作流(actor)状态存储。
在另一个应用程序中调用活动
在调用活动时,在 WorkflowTaskOptions 上设置 TargetAppId 以在另一个应用程序中执行它:
public sealed class BusinessWorkflow : Workflow<string, string>
{
public override async Task<string> RunAsync(WorkflowContext context, string input)
{
var options = new WorkflowTaskOptions { TargetAppId = "App2" };
var output = await context.CallActivityAsync<string>(nameof(ActivityA), input, options);
return output;
}
}
父工作流继续在本地进行编排并接收活动结果。
在另一个应用程序中调用子工作流
在调用子工作流时,在 ChildWorkflowTaskOptions 上设置 TargetAppId 以在另一个应用程序中执行它:
public sealed class BusinessWorkflow : Workflow<string, string>
{
public override async Task<string> RunAsync(WorkflowContext context, string input)
{
var options = new ChildWorkflowTaskOptions { TargetAppId = "App2" };
var output = await context.CallChildWorkflowAsync<string>(nameof(Workflow2), input, options);
return output;
}
}