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

Azure Functions隔离模式下Service Bus并发配置方式咨询

Azure Functions隔离模式下Service Bus并发配置的管理方式

问题场景

将进程内模式的Azure Functions迁移至隔离模式时,遇到Service Bus并发配置的管理问题:

  • 隔离模式下,常见的Service Bus配置(如maxConcurrentCalls)示例多通过host.json文件设置,示例配置如下:
{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "clientRetryOptions":{
                "mode": "exponential",
                "tryTimeout": "00:01:00",
                "delay": "00:00:00.80",
                "maxDelay": "00:01:00",
                "maxRetries": 3
            },
            "prefetchCount": 0,
            "transportType": "amqpWebSockets",
            "webProxy": "https://proxyserver:8080",
            "autoCompleteMessages": true,
            "maxAutoLockRenewalDuration": "00:05:00",
            "maxConcurrentCalls": 16,
            "maxConcurrentSessions": 8,
            "maxMessageBatchSize": 1000,
            "minMessageBatchSize": 1,
            "maxBatchWaitTime": "00:00:30",
            "sessionIdleTimeout": "00:01:00",
            "enableCrossEntityTransactions": false
        }
    }
}
  • 原进程内模式中,可通过appsettings.json配置并动态读取管理并发参数,示例代码如下:
var serviceBusMaxConcurrentCalls = 
    Configuration.GetValue<int>("AppConfig:ServiceBus:Concurrency:MaxConcurrentCalls");

var serviceBusMaxConcurrentSessions = 
    Configuration.GetValue<int>("AppConfig:ServiceBus:Concurrency:MaxConcurrentSessions");

var serviceBusMaxConcurrentCallsPerSession = 
    Configuration.GetValue<int>("AppConfig:ServiceBus:Concurrency:MaxConcurrentCallsPerSession");

services.Configure<ServiceBusOptions>(options =>
    {
        options.MaxConcurrentCalls = serviceBusMaxConcurrentCalls;
        options.MaxConcurrentSessions = serviceBusMaxConcurrentSessions;
        options.MaxConcurrentCallsPerSession = serviceBusMaxConcurrentCallsPerSession;
        options.AutoCompleteMessages = false;
    }
);

请问是否仍可通过appsettings来管理Service Bus的并发配置?还是必须维护环境专属的host.json文件?

解决方案

可以通过appsettings管理Service Bus的并发配置,无需维护环境专属的host.json文件,具体实现步骤如下:

  1. 在appsettings中定义配置项
    在appsettings.json(或对应环境的配置文件,如appsettings.Staging.json)中添加Service Bus并发参数:
{
  "AppConfig": {
    "ServiceBus": {
      "Concurrency": {
        "MaxConcurrentCalls": 16,
        "MaxConcurrentSessions": 8,
        "MaxConcurrentCallsPerSession": 1
      }
    }
  }
}
  1. 在隔离模式Program.cs中注入配置
    在隔离模式项目的Program.cs里,通过ConfigureServices方法读取配置并配置ServiceBusOptions:
var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices((context, services) =>
    {
        var config = context.Configuration;
        services.Configure<ServiceBusOptions>(options =>
        {
            options.MaxConcurrentCalls = config.GetValue<int>("AppConfig:ServiceBus:Concurrency:MaxConcurrentCalls");
            options.MaxConcurrentSessions = config.GetValue<int>("AppConfig:ServiceBus:Concurrency:MaxConcurrentSessions");
            options.MaxConcurrentCallsPerSession = config.GetValue<int>("AppConfig:ServiceBus:Concurrency:MaxConcurrentCallsPerSession");
            options.AutoCompleteMessages = false;
            // 其他Service Bus配置参数也可在此处设置
        });
    })
    .Build();

host.Run();
  1. 配置优先级说明
    若host.json与appsettings中存在相同配置项,appsettings的配置会覆盖host.json中的值。这意味着你可以通过环境变量、Azure App Configuration等方式动态调整参数,无需修改host.json文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:05:17