3

我有一个 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

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

4

1 回答 1

1

根据您的问题描述,您无需担心消息累积。而且您不需要创建另一个函数来侦听同一个存储队列。如果您对 azure 函数使用消费计划,它将扩展更多实例来处理消息。你可以参考这个文档。 在此处输入图像描述 在此处输入图像描述

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

根据您对每个实例运行的要求最多可能使用 1 GB 内存,我建议您为您的功能使用“高级计划”。

当您使用高级计划创建功能应用程序时,您可以选择“ EP1 ”,如下图所示。“ EP1 ”计划最大内存3.5GB,功能运行时可以横向扩展至3个实例。 在此处输入图像描述

函数应用创建后,进入函数应用,点击“ Scale out(App Service Plan) ”,然后将“ Maximum Burst ”设置为3。这意味着该计划将最多扩展到 3 个实例。 在此处输入图像描述

如果您希望同时运行更多实例,您还可以为您的函数应用选择“ EP2 ”或“ EP3 ”高级计划并更改“ Maximum Burst ”的值。

于 2020-11-06T06:04:49.937 回答