azure - 限制 Azure Function App 中的 Azure 存储队列处理

标签 azure azure-functions

我创建了一个带有 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/49369681/

相关文章:

Azure AD :Powershell script to create roles based on groups

azure - 如何将Azure持久事件添加到批处理

javascript - Azure Durable Function (Node.JS) 错误 "Microsoft.Azure.WebJobs.Host: Can' t 将参数 'data' 绑定(bind)到类型 'System.String' 。”

azure - 消耗计划中的 Azure 函数是否按等待 Thread.Sleep() 所花费的时间计费?

c# - Azure Blob 存储 | AcquireLeaseAsync,同步等待直到锁释放

node.js - Azure 函数在 Node 启动时运行代码

python - 运行存储过程时分区键错误

azure - 如何检索 Azure 搜索索引的内容?

azure - 设置逻辑应用时错误请求无效主机

c# - 使用ajax在MVC项目中不起作用时的Azure blob下载