首页 文章

在Azure功能应用程序中限制Azure存储队列处理

提问于
浏览
19

我创建了一个Azure功能应用程序,其中包含一个Azure存储队列触发器,用于处理每个队列项都是URL的队列 . 该功能只下载URL的内容 . 我有另一个函数加载和解析站点的XML站点 Map ,并将所有页面URL添加到队列中 . 我遇到的问题是,功能应用程序运行得太快,它会破坏网站,使其开始返回服务器错误 . 有没有办法限制/限制功能应用程序运行的速度?

当然,我可以编写一个简单的Web作业来连续处理它们(或者使用一些异步但限制并发请求的数量),但我真的很喜欢Azure Functions的简单性并想尝试“无服务器”计算 .

1 回答

  • 27

    您可以考虑几个选项 .

    首先,您可以在 host.json 中配置一些控制队列处理的旋钮(记录为here) . queues.batchSize 旋钮是一次获取的队列消息数 . 如果设置为1,则运行时将一次获取1条消息,并且仅在完成该消息的处理时获取下一条消息 . 这可以为您提供单个实例的某种级别的序列化 .

    另一个选项可能是您在排队的邮件上设置 NextVisibleTime ,使它们间隔开 - 默认情况下,排队的邮件变为可见并准备好立即处理 .

    最后一个选项可能是您将一个消息与一个站点的所有URL集合排队,而不是一次排队,因此在处理消息时,您可以在函数中串行处理URL,并限制并行性那样 .

相关问题