Azure存储队列触发器-使用远程队列名称

时间:2020-04-20 10:30:25

标签: azure azure-functions

我正在使用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()变量来解析队列名?通过重新加载队列触发功能还是什么?

谢谢, 基兰。

1 个答案:

答案 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