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

标签 azure azure-functions

我正在使用 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/

相关文章:

c# - 在 b2c 中的用户注册时触发 azure 函数

powershell - 如何获取在 Azure Function 中运行的 Azure PowerShell 模块版本列表?

c# - 如何修改在 Azure Functions 中 native 注入(inject)的 IConfiguration

azure - 使用 GitHub Actions 和 Helm 部署到 AKS

azure - 在不同的azure资源组中共享应用服务计划

azure - 更改 Azure 搜索中的索引器频率

node.js - 尝试获取 Azure Blob 存储中非公开的文件时,Azure 函数收到 AuthorizationFailure

mongodb - Azure 表与 Azure 上的 MongoDB

azure - 使用 terraform 将 VM 添加到新的 Azure 监控(无需 OMS 代理)

java - Azure Spring Boot功能-如何将触发器和输入绑定(bind)同时传递给handleRequest方法?