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

如何通过代码设置Azure服务总线主题订阅的Lock Duration参数

解决方案

1. 正确配置LockDuration

LockDuration是服务总线订阅的服务端属性,不属于Azure Functions的运行时配置,所以你在host.json中配置MaxLockDuration不会生效,需要在创建订阅时通过SubscriptionDescription指定:

public async Task CreateSubscription(string connectionString, string topicName, string subsciptionName)
{
    var m = new ManagementClient(connectionString);

    var exists = await m.SubscriptionExistsAsync(topicName, subsciptionName);
    if (!exists)
    {
        await m.CreateSubscriptionAsync(new SubscriptionDescription(topicName, subsciptionName)
        {
            // 此处设置LockDuration,服务端最大支持5分钟
            LockDuration = TimeSpan.FromMinutes(5)
        });
    }
}

注意:如果对应订阅已经提前创建完成,修改上述代码不会生效,需要手动到Azure门户修改现有订阅的LockDuration属性,或删除旧订阅让代码重新创建。

2. 修正host.json配置

你当前的host.json配置层级和参数命名错误,导致autoRenewTimeout等参数不生效,正确配置如下(适配Azure Functions进程内模型):

{
  "version": "2.0",
  "extensions": {
    "serviceBus": {
      "maxConcurrentCalls": 1,
      "messageHandlerOptions": {
        "autoComplete": true,
        "autoRenewTimeout": "00:30:00"
      }
    }
  }
}

两个核心参数的作用区别:

  • LockDuration:服务端单次消息锁的有效时长,最长只能设5分钟,到期后未处理的消息会自动释放回队列
  • autoRenewTimeout:函数运行时的本地配置,若函数处理消息的时长超过LockDuration,运行时会自动续租消息锁,最长续租到该配置的时长,需保证该值大于你业务逻辑的最长执行时间

3. 额外注意事项

如果你的函数运行时间超过autoRenewTimeout的时长,仍会出现锁自动释放的问题,需要对应调整该配置的大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:09:02