我正在使用 Azure 应用程序配置存储来存储配置。我在 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
条目。
是否可以在Run()
中使用config
变量来解析队列名称?通过重载队列触发函数什么的?
谢谢, 基兰。
最佳答案
Is it possible to make use of config variable in Run() to resolve queuename? By reloading queue trigger function or something?
是的,可以。
为 IWebJobsBuilder 接口(interface)创建扩展方法以设置与 AzureAppConfiguration 的连接。
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;
}
azureConnectionString 是从 appsetting.json 读取的,并且应包含 Azure 应用程序配置的 URL。
在startup.cs中:
public void Configure(IWebJobsBuilder builder)
{
builder.AddAzureConfiguration();
ConfigureServices(builder.Services)
.BuildServiceProvider(true);
}
更多详情可以引用这个SO thread .
关于Azure 存储队列触发器 - 使用远程队列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61320291/