能否在Azure Durable Functions中从一个Activity Function调用另一个?
Azure Durable Functions中Activity Function能否调用其他Activity?
不允许直接从一个Activity Function调用另一个Activity Function。
在Durable Functions的架构设计里,Orchestrator是工作流的核心协调角色,负责统筹调度所有Activity、子Orchestrator的执行,同时管理工作流状态持久化、重试逻辑等关键环节。而Activity只是专注执行单一任务的单元,没有内置调度能力,如果直接在一个Activity里调用另一个Activity,会完全绕过Orchestrator的状态追踪机制,导致工作流执行记录无法正确保存,后续重试、故障恢复等功能也会失效。
针对你给出的场景,正确做法就是像你示例里最初的逻辑那样,把两个Activity的调用都放在Orchestrator中完成:先调用GetDbToken获取数据库令牌,再将令牌作为参数传递给GetOrdersFromDb获取订单数据。
另外帮你修正示例代码里的两处小错误:
GetOrdersFromDb的FunctionName属性拼写错误(多了个字母a)- Orchestrator的返回类型
Task<List<string>>和实际返回的List<Order>不匹配
修正后的完整代码如下:
[FunctionName("ExpensiveDurableSequence")] public static async Task<List<Order>> Run( [OrchestrationTrigger] DurableOrchestrationContext context) { var response = new List<Order>(); var token = await context.CallActivityAsync<string>("GetDbToken", "i-am-root"); var orders = await context.CallActivityAsync<IEnumerable<Order>>("GetOrdersFromDb", token); response.AddRange(orders); return response; } [FunctionName("GetDbToken")] public static string GetDbToken([ActivityTrigger] string username) { // 补充生成token的业务逻辑 return token; } [FunctionName("GetOrdersFromDb")] public static IEnumerable<Order> GetOrdersFromDb([ActivityTrigger] string apikey) { // 补充从数据库获取订单的业务逻辑 return orders; }
内容的提问来源于stack exchange,提问作者KAVIN S CSE
相关产品推荐
相关产品推荐

