如何在Azure功能应用程序中为队列触发器配置队列名称

Ste*_*bob 11 azure azure-webjobs azure-functions

我正在Azure中创建一个功能应用程序,并希望使用队列触发器.我知道如何在设计时配置队列名称,例如:

[FunctionName("MyTestFunction")]
public static void Run([QueueTrigger("myqueue-items", Connection = "testdelete")]string myQueueItem, TraceWriter log)
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够在配置文件中定义和引用它.我知道function.json(可能是这个),host.json和local.settings.json的存在,但我不知道如何在那里设置队列名称并在函数中引用它.

如果我部署在visual studio中创建的新创建的函数(使用新的15.3更新),我可以在部署后的function.json文件中看到以下内容(即使我在本地开发时该文件不存在):

  "bindings": [
    {
      "type": "queueTrigger",
      "queueName": "myqueue-items",
      "connection": "testdelete",
      "name": "myQueueItem"
    }
Run Code Online (Sandbox Code Playgroud)

我发现,如果我创建该文件,并将"queueName"更改为与实际函数中的值不匹配的内容,则遗憾的是它不会覆盖它(我猜这太容易了).

如何在函数QueueTrigger属性中引用function.json中的绑定?

据推测,无论解决方案是什么,我都可以使用毒物队列处理来做同样的事情吗?

我想这样做的原因是因为我需要部署完全相同函数的多个实例,但是将每个实例指向不同的队列(为了绕过最大内存限制).

谢谢.

Gar*_*son 30

您是否可以将队列名称作为%settingName%应用程序功能的设置(使用语法)引用?然后在您部署的每个功能应用程序中将设置更改为所需的队列名称.

[FunctionName("MyTestFunction")]
public static void Run([QueueTrigger("%MyQueueName%", Connection = "testdelete")]string myQueueItem, TraceWriter log)
Run Code Online (Sandbox Code Playgroud)

并指定local.settings.json本地运行的设置

{
  "Values: {
     "MyQueueName": "myqueue-items"
   }
}
Run Code Online (Sandbox Code Playgroud)

  • @CrhistianRamirez Microsoft 文档位于[此处](https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-expressions-patterns#binding-expressions---app-settings) (3认同)
  • 我暂时没有使用这些设置,但是从内存中它们位于功能应用程序的AppSettings中 - 所以这取决于你如何发布功能应用程序(设置可能在ARM模板中) (2认同)
  • @Taran,您可以将它们放入功能应用程序的应用程序设置中 (2认同)
  • 这确实有效!此外,如果您想在 azure 门户 appsettings 选项卡中覆盖这些设置,那么您不需要编写父设置名称 Values:MyQueueName ,只需:MyQueueName。 (2认同)
  • 这是否记录在任何地方,以便我可以阅读更多相关信息? (2认同)