我创建了一个带有 Azure 存储队列触发器的 Azure Function 应用,该触发器处理一个队列,其中每个队列项都是一个 URL。该函数只是下载 URL 的内容。我有另一个函数,用于加载和解析站点的 XML Sitemap 并将所有页面 URL 添加到队列中。我遇到的问题是,Functions 应用程序运行得太快,它会影响网站,因此它开始返回服务器错误。有没有办法限制/调节 Functions 应用程序的运行速度?
当然,我可以编写一个简单的 Web 作业来串行处理它们(或者使用一些异步,但限制并发请求的数量),但我真的很喜欢 Azure Functions 的简单性,并且想尝试“无服务器”计算.
最佳答案
您可以考虑几个选项。
首先,您可以在 host.json
中配置一些旋钮来控制队列处理(记录为 here )。 queues.batchSize
旋钮是一次获取多少队列消息。如果设置为 1,则运行时将一次获取 1 条消息,并且仅在该消息的处理完成后才获取下一条消息。这可以为您在单个实例上提供一定程度的序列化。
另一个选项可能是您对排队的消息设置 NextVisibleTime,使其间隔开 - 默认情况下,排队的消息变得可见并准备立即处理。
最后一个选项可能是您将消息与站点的所有 URL 的集合一起放入队列,而不是一次一个,因此当处理消息时,您可以在函数中连续处理 URL,并且以这种方式限制并行性。
关于azure - 限制 Azure Function App 中的 Azure 存储队列处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094041/