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文件,具体实现步骤如下:
- 在appsettings中定义配置项
在appsettings.json(或对应环境的配置文件,如appsettings.Staging.json)中添加Service Bus并发参数:
{ "AppConfig": { "ServiceBus": { "Concurrency": { "MaxConcurrentCalls": 16, "MaxConcurrentSessions": 8, "MaxConcurrentCallsPerSession": 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();
- 配置优先级说明
若host.json与appsettings中存在相同配置项,appsettings的配置会覆盖host.json中的值。这意味着你可以通过环境变量、Azure App Configuration等方式动态调整参数,无需修改host.json文件。
内容的提问来源于stack exchange,提问作者Asfaqur FAQ
相关产品推荐
相关产品推荐

