azure-functions - 使用多个 Azure Functions QueueTriggers 监听同一个存储队列

标签 azure-functions azure-storage azure-webjobs azure-storage-queues azure-triggers

我有一个 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 Functions 也监听相同的存储队列?我认为这没问题,因为每个消息/客户端都有独立于它们的工作,所以如果 Azure Function 应用程序中的任何一个先接收到一条消息都没有关系。这对我来说似乎是最具成本效益的解决方案,但我想知道是否有更好的替代方案或我没有想到的任何负面结果。

最佳答案

根据您的问题描述,您无需担心消息堆积。而且您不需要创建另一个函数来监听同一个存储队列。如果你使用 consumption plan对于您的 azure 函数,它将扩展更多实例来处理消息。你可以引用这篇文档。 enter image description here enter image description here

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

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

当您使用高级计划创建函数应用程序时,您可以选择“EP1”,如下图所示。 “EP1”计划最大内存为3.5GB,因此在函数运行时可以横向扩展到3个实例。 enter image description here

创建函数应用后,转到函数应用并单击“Scale out(App Service Plan)”,然后将“Maximum Burst”设置为 3。这意味着该计划将最多扩展到 3 个实例。 enter image description here

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

关于azure-functions - 使用多个 Azure Functions QueueTriggers 监听同一个存储队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64708008/

相关文章:

python - Azure(函数)参数在 Python 中声明,但不在 function.json 中声明

c# - 如何将动态值传递给EventHub属性Azure函数c#

azure - 如何使用 Azure SAS token 的 CorrelationId?

azure - 从 VisualStudio 发布的 WebJob 自动插入连接字符串

c# - 来自计时器触发器的 Azure 函数输出服务总线绑定(bind)

Azure Function Blob 存储连接 : The format of value '*' is invalid

azure - GetBlobReference 和 GetBlobReferenceFromServer 有什么区别?

wcf - 如何筛选 Azure 日志或 WCF 数据服务筛选器(傻瓜式)

Azure Web 作业 - 横向扩展杀死了现有的 Web 作业

sockets - 是否可以使用 Azure Web 作业来监听公共(public)套接字