首页 > 解决方案 > 我可以运行一个 Azure 函数的多个实例来监听同一个队列吗

问题描述

背景: 我最近遇到了一个问题,我的函数无法处理负载并且队列消息正在建立。从长远来看,我正在查看代码以找出瓶颈所在,但从短期来看,我需要解决这个问题。
问题: 我可以添加同一个 azure 函数的多个实例(即使它是重命名 myjobrunner1、myjobrunner2)等都监听同一个队列?这对我的情况有帮助吗?

一些警告:
高级计划看起来不错,但我目前无法在生产中测试预览。
添加专用 AppService 是一种选择,但它是一个长期修复。我现在遇到了麻烦。
代码修复正在进行中,以更好地处理负载并提高性能,但外部服务阻碍它们的事实是一个因素。

标签: azureazure-functions

解决方案


我是如何解决问题的。
我添加了一个额外的队列和逻辑来拆分两个队列之间的消息。然后,我创建了一个指向第二个队列的函数(1 和 2)的新实例。我最初认为队列的工作原理是只允许提取一份消息副本。然后没有其他服务可以读取该消息。我的测试似乎不是这种情况。

运行两个函数,每个函数都使用最大批次数解决了这个问题。在我们可以有效地查看更多代码增强功能之前,我可以继续这种模式。但是我们的瓶颈似乎是 httpclient 实例(我不能将它们作为静态运行并且需要进行重大更改)和一些可以优化的数据库调用。

如果其他人有其他建议,请添加。当高级计划发布时,我会尝试,但在那之前我将不得不坚持这个解决方案。


推荐阅读