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

Azure Functions Service Bus会话触发器吞吐量不足调优咨询

Azure Function App 会话队列吞吐量优化方案

1. 禁用动态并发避免覆盖自定义配置

Azure Functions 3.x版本默认启用动态并发控制,会自动根据实例负载调整触发器并发数,直接覆盖你在host.json中配置的maxConcurrentSessions参数,这是导致并发数不达预期、实例闲置的最常见原因。
请在host.json根节点添加以下配置,禁用动态并发,让自定义的会话并发配置生效:

{
  "version": "2.0",
  "concurrency": {
    "dynamicConcurrencyEnabled": false,
    "maxConcurrentActivityFunctions": 200
  },
  // 保留原有其他配置
}

maxConcurrentActivityFunctions参数控制单实例最多可同时执行的函数调用数,需设置为不小于预期的单实例会话并发数。

2. 调整单实例多工作进程配置

Windows消费计划默认单实例只启动1个Functions工作进程,你可以通过添加Function App应用配置提升单实例的处理能力,充分利用实例资源:

  • 添加配置项FUNCTIONS_WORKER_PROCESS_COUNT,取值范围110,建议设置为48,每个工作进程都会独立加载Service Bus触发器,各自持有你配置的maxConcurrentSessions:200的并发配额,大幅提升单实例的会话处理上限。
  • 若需要更大的全局并发,可配置WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT,显式指定Function App最大可扩容的实例数,避免订阅默认配额限制扩容。

3. 修复Service Bus扩展版本已知问题

你当前使用的Microsoft.Azure.WebJobs.Extensions.ServiceBus 5.0.0属于早期大版本,存在多个会话调度相关的已知bug,会导致会话分配不均、实例闲置的问题,建议直接升级到5.13.0及以上的稳定版本,即可解决大部分底层调度问题。
同时可以根据单条消息处理速度调整prefetchCount:如果单条消息处理耗时<100ms,可将prefetchCount调整到500,减少网络交互开销,提升消费速度。

4. 限制Event Hub触发器的资源占用

同个Function App内的多个触发器会共享实例的并发配额,需要给Event Hub触发器也设置合理的并发上限,避免它占用过多资源导致Service Bus会话处理无法拿到配额:
在host.json的extensions节点下添加Event Hub的并发控制配置:

"eventHubs": {
  "maxEventBatchSize": 100,
  "prefetchCount": 300,
  "processorOptions": {
    "maxConcurrentCallsPerPartition": 10
  }
}

根据实际业务的Event Hub处理优先级调整参数,预留足够的并发配额给Service Bus会话处理。

5. 核对超时配置匹配业务逻辑

Windows消费计划默认的函数执行超时时间为5分钟,你当前配置的maxAutoRenewDuration:00:55:00远超过消费计划的最大允许超时(10分钟),会导致函数执行到超时上限后被强制终止,会话被释放后重新分配,反而拖慢整体消费速度。请添加应用配置FUNCTIONS_TIMEOUT,设置为00:10:00,同时根据实际单条消息的最大处理时间调整maxAutoRenewDuration不超过10分钟。

内容的提问来源于stack exchange,提问作者Markus S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:24:03