我正在 Azure 中创建一个函数应用程序,并且想要使用队列触发器。 我知道如何在设计时配置队列名称,例如:
[FunctionName("MyTestFunction")]
public static void Run([QueueTrigger("myqueue-items", Connection = "testdelete")]string myQueueItem, TraceWriter log)
但是,我希望能够在配置文件中定义和引用它。 我知道 function.json (可能是这个)、host.json 和 local.settings.json 的存在,但我不知道如何在其中设置队列名称并在函数中引用它。
如果我部署在 Visual Studio 中创建的新函数(使用新的 15.3 更新),我可以在部署后的 function.json 文件中看到以下内容(即使我在本地开发时该文件不存在):
"bindings": [
{
"type": "queueTrigger",
"queueName": "myqueue-items",
"connection": "testdelete",
"name": "myQueueItem"
}
我发现,如果我创建该文件,并将“queueName”更改为与实际函数中的值不匹配的内容,不幸的是它不会覆盖它(我想这太容易了)。
如何在函数 QueueTrigger 属性中引用 function.json 中的绑定?
大概无论解决方案是什么,都可以让我对毒队列处理做同样的事情?
我想这样做的原因是因为我需要部署完全相同的函数的多个实例,但将每个实例指向不同的队列(为了绕过最大内存限制)。
谢谢。
您能否不只引用队列名称作为应用程序功能的设置(使用
%settingName%
语法)?然后在您部署的每个功能应用程序中将设置更改为所需的队列名称。
[FunctionName("MyTestFunction")]
public static void Run([QueueTrigger("%MyQueueName%", Connection = "testdelete")]string myQueueItem, TraceWriter log)
并在
local.settings.json
中指定设置以在本地运行
{
"Values: {
"MyQueueName": "myqueue-items"
}
}
我来到这里谷歌搜索一种动态更改队列名称的方法,并最终弄清楚如何在函数应用程序启动时更改队列名称。
您可以像 Garth 提议的那样利用环境变量:
public static void Run([QueueTrigger("%MyQueueName%", Connection = "testdelete")]string myQueueItem, TraceWriter log)
在
Startup
类(继承自 FunctionsStartup
)中,重写以下方法并将队列名称设置为您喜欢的任何名称:
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
if (IsDevelopmentEnvironment)
{
Environment.SetEnvironmentVariable("MyQueueName", $"personal-queue-{Environment.UserName}");
}
base.ConfigureAppConfiguration(builder);
}
我尝试在
public override void Configure(IFunctionsHostBuilder builder)
中设置它,但似乎环境已被读取并且 MyQueueName
变量未更新。在 .NET 6.0(进程内函数应用程序)上使用 ConfigureAppConfiguration
方法执行此操作对我有用