我有一个ServiceBusQueue( SBQ ),它可以接收很多消息负载。 我有一个带有accessRights(manage)的ServiceBusTrigger( SBT ),它不断轮询来自SBQ的消息。
我面临的问题是: 我的SBT(一次有16个实例)一次选择消息(分别有16条消息)并向另一个服务器(假设为S1)创建请求。 如果SBT连续创建500-600个请求,则服务器S1停止响应。
我期望: 我可以限制/限制立即从SBQ提取消息,以便间接限制发送请求。
请分享您的想法,我应该遵循哪种设计。我无法在Google上找到确切的解决方案。
答案 0 :(得分:1)
限制服务总线触发器的maximum concurrent calls。
在host.json
中,添加配置以限制并发性(即默认情况下,您看到的16 messages at once
)。以v2函数为例。
{
"version": "2.0",
"extensions": {
"serviceBus": {
"messageHandlerOptions": {
"maxConcurrentCalls": 8
}
}
}
}
限制Function host instances count。当主机向外扩展时,每个实例都有一个Service Bus触发器,该触发器按上述设置并发读取多个消息。
如果触发器位于专用的App服务计划上,则实例中的规模将计为某个较小的值。对于消费计划中的功能,请添加具有合理值(<= 5)的App设置WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 。当然,我们可以将count设置为1以便严格控制行为。
如果我们可以控制消息的发送方式,请schedule the incoming messages以帮助降低请求率。
使用static clients重用与服务器S1的连接。