azure - Azure 函数:限制并发服务总线消息的数量
问题描述
我正在开发一个 Azure 函数,它从基于会话的服务总线主题触发并通过 API 请求将数据发送到 CRM 系统。CRM 的 API 有使用和负载保护限制,我们可能会在短时间内收到大量消息,因此我正在寻找限制该功能的最佳方法。
我认为 host.json 中的 maxConcurrentSessions 设置可能对我有帮助,我可以一次将其限制为大约 20 条消息。我还可以查看 Function App 中的“强制横向扩展限制”,但我想这不一定会限制一次处理的消息数量。maxConcurrentSessions 会是最好的设置,还是有其他考虑?
另一种方法(可能除了上述方法之外)是在我达到 API 限制后的一段时间内“暂停”或停止函数接收更多消息。有谁知道是否可以以编程方式实时暂停 Azure 函数的执行,或者阻止它接收更多消息?
解决方案
我认为 host.json 中的 maxConcurrentSessions 设置可能对我有帮助,我可以一次将其限制为大约 20 条消息。我还可以查看 Function App 中的“强制横向扩展限制”,但我想这不一定会限制一次处理的消息数量。maxConcurrentSessions 会是最好的设置,还是有其他考虑?
您可以使用 maxConcurrentCalls 来限制消息泵应启动的回调的最大并发调用数。默认情况下,Functions 运行时同时处理多条消息。如果设置为 1,它将一次只处理一个队列或主题消息。
结构如下:
{
"version": "2.0",
"extensions": {
"serviceBus": {
"prefetchCount": 100,
"messageHandlerOptions": {
"autoComplete": true,
"maxConcurrentCalls": 1,
"maxAutoRenewDuration": "00:05:00"
},
"sessionHandlerOptions": {
"autoComplete": true,
"messageWaitTimeout": "00:00:30",
"maxAutoRenewDuration": "00:55:00",
"maxConcurrentSessions": 1
}
}
}
}
同时,您可以将Maximum Scale Out Limit设置为较小的值,以防止函数在高负载下扩展。
推荐阅读
- angular - Ionic 4:否决幻灯片以打开离子元素菜单
- c# - CommandLine.Parser 是否支持选项的多次出现?
- scroll - 使用白蚁时如何防止Tmux在多个窗格中视觉滚动?
- vue.js - 访问 getter 中的状态属性
- angular - Angular:显示不受支持的 IE 版本而不是白屏
- javascript - 在函数内等待/观察
- android - Kotlin - 类型不匹配所需的集合找到列表
- javascript - 如何在命令行中传递参数以运行纱线脚本
- java - Java Spring refcursor queries slows down
- hp-nonstop - Is there a grep equivalent in TACL on HP-Nonstop?