You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Durable Functions的编排函数内检查编排实例状态

在Azure Durable Function编排器内检查运行中实例的解决方案

在Durable Function的编排器(IDurableOrchestrationContext上下文)中,不能直接使用IDurableOrchestrationClient查询实例状态——因为编排器要求代码必须是确定性的,而查询外部状态属于非确定性操作。正确的做法是将检查逻辑封装到**活动函数(Activity Function)**中,再在编排器里调用这个活动函数。

步骤1:创建用于检查实例的活动函数

这个活动函数会注入IDurableOrchestrationClient,负责查询符合前缀规则的运行中实例:

[FunctionName("CheckRunningOrchestratorBInstances")]
public static async Task<bool> CheckRunningOrchestratorBInstances(
    [ActivityTrigger] string instancePrefix,
    [DurableClient] IDurableOrchestrationClient client,
    ILogger log)
{
    // 过滤条件:只查询运行中的实例
    var filter = new OrchestrationInstanceStatusFilter
    {
        Statuses = new List<OrchestrationStatus> { OrchestrationStatus.Running }
    };

    // 查询所有符合条件的实例
    var instances = await client.ListInstancesAsync(filter, CancellationToken.None);

    // 检查是否存在实例ID以指定前缀开头的运行中实例
    return instances.DurableOrchestrationInstances.Any(instance => 
        instance.InstanceId.StartsWith(instancePrefix));
}

步骤2:修改OrchestratorA编排器调用活动函数

在OrchestratorA中,先调用上面的活动函数检查实例,再决定是否启动新的OrchestratorB:

[FunctionName("OrchestratorA")]
public static async Task OrchestratorA(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    for (int i = 0; i < 10; i++)
    {
        string instancePrefix = $"OrchestratorB_{i}";
        
        // 调用活动函数检查是否有运行中的实例
        bool hasRunningInstance = await context.CallActivityAsync<bool>(
            "CheckRunningOrchestratorBInstances", 
            instancePrefix);

        if (!hasRunningInstance)
        {
            // 没有运行中的实例时,启动新的OrchestratorB
            string newInstanceId = $"{instancePrefix}_{Guid.NewGuid()}";
            context.StartNewOrchestration("OrchestratorB", null, newInstanceId);
        }
    }
}

关键说明

  • 编排器的确定性要求:编排器代码不能包含任何非确定性操作(比如直接查询外部状态、调用随机数生成器等),所有这类操作必须委托给活动函数处理。
  • ListInstancesAsync的性能:如果实例数量较多,可以通过设置CreatedTimeFrom参数缩小查询时间范围,避免全量查询影响性能。

内容的提问来源于stack exchange,提问作者gsubiran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:47:27