我有一个 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
我正在使用 batchSize
为 1
的 Linux 消费计划,因为队列触发器的每次调用可能需要大约 5 分钟,我想确保我没有' 超出内存限制。这个解决方案现在对我来说效果很好,但我担心当客户端数量增加时,消息将开始在队列中累积。是否可以只创建一个新的 Azure Functions 也监听相同的存储队列?我认为这没问题,因为每个消息/客户端都有独立于它们的工作,所以如果 Azure Function 应用程序中的任何一个先接收到一条消息都没有关系。这对我来说似乎是最具成本效益的解决方案,但我想知道是否有更好的替代方案或我没有想到的任何负面结果。
最佳答案
根据您的问题描述,您无需担心消息堆积。而且您不需要创建另一个函数来监听同一个存储队列。如果你使用 consumption plan对于您的 azure 函数,它将扩展更多实例来处理消息。你可以引用这篇文档。
===============================更新======== ========================
根据您的要求,每个实例运行最多可能使用 1 GB 内存,我建议您使用“Premium plan”作为您的功能。
当您使用高级计划创建函数应用程序时,您可以选择“EP1”,如下图所示。 “EP1”计划最大内存为3.5GB,因此在函数运行时可以横向扩展到3个实例。
创建函数应用后,转到函数应用并单击“Scale out(App Service Plan)”,然后将“Maximum Burst”设置为 3
。这意味着该计划将最多扩展到 3 个实例。
如果您希望同时运行更多实例,您还可以为您的函数应用选择“EP2”或“EP3”高级计划并更改值“最大爆发”。
关于azure-functions - 使用多个 Azure Functions QueueTriggers 监听同一个存储队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64708008/