我正在使用Azure App配置存储来存储配置。我正在startup.cs
中使用以下代码从Azure加载配置。
var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(options =>
{
options.Connect(this.Values.AppConfigConnectionString);
options.Select(keyFilter: KeyFilter.Any, labelFilter: this.Values.Env);
});
var config = builder.Build();
现在,此config
变量包含我的队列名称。我需要这种动态特性,以便在4种不同的环境中创建和处理它。开发/阶段/质量检查/产品。
public async Task Run(
[QueueTrigger("%QueueName%", Connection = "StorageConnection")]VoiceHubEvent item)
这不起作用,因为我的local.settings.json
文件不包含QueueName
条目。
是否可以利用config
中的Run()
变量来解析队列名?通过重新加载队列触发功能还是什么?
谢谢, 基兰。
答案 0 :(得分:0)
是否可以在Run()中使用config变量来解析队列名称?通过重新加载队列触发功能还是什么?
是的,可以。
为IWebJobsBuilder接口创建扩展方法以建立与AzureAppConfiguration的连接。
def ffill(arr, mx):
"""Forward fill 0 values in arr with a max of mx consecutive 0 values"""
first = None # first index of a sequence of 0 to fill
prev = None # previous value to use
for i, val in enumerate(arr):
if val == 0.: # process a null value
if prev is not None:
if first is None:
first = i
elif i - first >= mx: # to much consecutive 0: give up
prev = None
first = None
else:
if first is not None: # there was a sequence to fill
arr[first:i] = prev
first = None
从您的appsetting.json中读取azureConnectionString的位置,其中应包含Azure应用程序配置的URL。
在startup.cs中:
public static IWebJobsBuilder AddAzureConfiguration(this IWebJobsBuilder webJobsBuilder)
{
//-- Get current configuration
var configBuilder = new ConfigurationBuilder();
var descriptor = webJobsBuilder.Services.FirstOrDefault(d => d.ServiceType == typeof(IConfiguration));
if (descriptor?.ImplementationInstance is IConfigurationRoot configuration)
configBuilder.AddConfiguration(configuration);
var config = configBuilder.Build();
//-- Add Azure Configuration
configBuilder.AddAzureAppConfiguration(options =>
{
var azureConnectionString = config[TRS.Shared.Constants.CONFIGURATION.KEY_AZURECONFIGURATION_CONNECTIONSTRING];
if (string.IsNullOrWhiteSpace(azureConnectionString)
|| !azureConnectionString.StartsWith("Endpoint=https://"))
throw new InvalidOperationException($"Missing/wrong configuration value for key '{TRS.Shared.Constants.CONFIGURATION.KEY_AZURECONFIGURATION_CONNECTIONSTRING}'.");
options.Connect(azureConnectionString);
});
//build the config again so it has the key vault provider
config = configBuilder.Build();
return webJobsBuilder;
}
有关更多详细信息,您可以参考此SO thread。