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

Azure Durable Functions编排实例手动停止与重试次数配置问题

Azure Durable Functions编排实例手动停止与重试次数配置问题

我来帮你解决这两个实际遇到的问题,结合你的代码场景一步步说明:

1. 手动停止编排实例的方法(无需停止整个Function App)

有两种实用的方式可以终止指定的编排实例:

  • 通过代码新增终止接口:你可以在现有HTTP触发函数的基础上,加一个专门用来终止实例的接口。比如在你的代码里新增这样一个函数:
@app.route(route="orchestrators/terminate/{instanceId}")
@app.durable_client_input(client_name="starter")
async def terminate_orchestration(req: func.HttpRequest, starter: str) -> func.HttpResponse:
    instance_id = req.route_params["instanceId"]
    # 调用Durable Client的terminate方法终止实例
    await starter.terminate(instance_id, "手动终止:停止无限重试")
    return func.HttpResponse(f"编排实例 {instance_id} 已成功终止")

部署后,你只需要调用这个接口并传入目标实例ID,就能直接停止对应的编排执行。

  • 通过Azure门户可视化操作:进入你的Function App后台,找到左侧菜单的「Durable Task Hub」(或者直接找到你的编排函数,点击「Monitor」进入实例监控页面),在实例列表里筛选出那些处于重试/挂起状态的实例,选中后点击顶部的「Terminate」按钮,就能手动停止它们。

2. 设置重试次数为0的方法

这里要分已存在的重试实例和新创建的实例两种情况处理:

  • 对于已经在重试的旧实例:这些实例的重试策略已经生效,没办法直接修改它们的重试次数,只能用上面的手动终止方法来停止它们的重试循环。
  • 对于新创建的编排实例,有两种配置方式可以让重试次数变为0:
    1. 全局配置(应用到所有编排):修改Function App根目录下的host.json文件,添加或更新Durable Task的全局重试策略:
    {
      "version": "2.0",
      "extensions": {
        "durableTask": {
          "orchestrationRetryPolicy": {
            "maxNumberOfAttempts": 0,
            "firstRetryIntervalInMilliseconds": 5000
          }
        }
      }
    }
    
    保存并重新部署后,所有新启动的编排实例都会遵循这个策略,失败后不再重试。
    2. 单个编排实例级别配置:如果你只想针对特定启动的实例设置0重试,可以在启动编排时指定重试选项。修改你CleanMatchEnrichParcel函数里的启动代码:
    import azure.functions as func
    import azure.durable_functions as df 
    from azure.durable_functions.models import RetryOptions, StartOrchestrationOptions
    import logging
    
    app = df.DFApp(http_auth_level=func.AuthLevel.FUNCTION)
    
    # ... 保留原有代码 ...
    
    async def CleanMatchEnrichParcel(req: func.HttpRequest, starter: str) -> func.HttpResponse:
        logging.info("CleanMatchEnrichParcel HTTP trigger function processed a request.")
        fname = req.route_params["functionName"]
        stateabbr = req.route_params["stateabbr"]
        county = req.route_params["county"]
        fparams = {"stateabbr": stateabbr, "county": county}
        
        # 配置重试次数为0
        retry_options = RetryOptions(first_retry_interval_in_milliseconds=5000, max_number_of_attempts=0)
        start_options = StartOrchestrationOptions(retry_policy=retry_options)
        
        instance_id = await starter.start_new(fname, None, fparams, start_options=start_options)
        logging.info(f"Started orchestration with ID = '{instance_id}'.")
        response = starter.create_check_status_response(req, instance_id)
        return(response)
    
    这样每次通过这个接口启动的编排实例,失败后都不会进行重试。

备注:内容来源于stack exchange,提问作者anilcreates

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:10:29