使用多个Azure Functions QueueTriggers侦听同一存储队列

问题描述

我有一个Azure Functions QueueTrigger,它在存储队列上侦听以下消息:

Message text
--------------------------
{"ClientName": "client1"}
{"ClientName": "client2"}
{"ClientName": "client3"}

然后QueueTrigger具有如下代码

if 'client1' == queue_msg['ClientName']:
    # do work required for client1
elif 'client2' == queue_msg['ClientName']:
    # do work required for client2
elif 'client3' == queue_msg['ClientName']:
    # do work required for client3

我正在使用batchSize1的Linux消费计划,因为队列触发器的每次调用可能需要大约5分钟,并且我想确保不超过内存限制。现在,该解决方案对我来说效果很好,但是我担心,当客户端数量增加时,消息将开始在队列中累积。可以创建一个新的同时在同一存储队列上侦听的Azure函数吗?我认为这是可以的,因为每个消息/客户端的工作都独立于它们,因此无论哪个Azure Function应用程序都首先接收消息都没有关系。对于我来说,这似乎是最经济有效的解决方案,但是我想知道是否有更好的选择或我没有想到的负面结果。

解决方法

根据对问题的描述,您不必担心消息堆积。而且,您无需创建另一个函数即可侦听同一存储队列。如果对天蓝色函数使用consumption plan,它将扩展更多实例来处理消息。您可以参考本文档。 enter image description here enter image description here

=============================== 更新 ======== ======================

根据您的要求,每个实例运行可能会使用多达1 GB的内存,建议您为功能使用“ Premium plan”。

使用高级计划创建功能应用程序时,可以选择“ EP1 ”,如下图所示。 “ EP1 ”计划最多可具有3.5GB内存,因此在运行该功能时可以扩展到3个实例。 enter image description here

创建功能应用后,转到功能应用并单击“ 横向扩展(应用服务计划)”,然后将“ 最大突发次数”设置为{{1 }}。这意味着该计划最多可扩展到3个实例。 enter image description here

如果您希望同时运行更多实例,则还可以为功能应用程序选择“ EP2 ”或“ EP3 ”高级计划,并更改“ 最大爆发次数”。