节流/限制serviceBus队列以触发消息形式ServiceBusTrigger

时间:2019-01-16 09:47:36

标签: c# azure azure-functions azureservicebus

我有一个ServiceBusQueue( SBQ ),它可以接收很多消息负载。 我有一个带有accessRights(manage)的ServiceBusTrigger( SBT ),它不断轮询来自SBQ的消息。

我面临的问题是: 我的SBT(一次有16个实例)一次选择消息(分别有16条消息)并向另一个服务器(假设为S1)创建请求。 如果SBT连续创建500-600个请求,则服务器S1停止响应。

我期望: 我可以限制/限制立即从SBQ提取消息,以便间接限制发送请求。

请分享您的想法,我应该遵循哪种设计。我无法在Google上找到确切的解决方案。

1 个答案:

答案 0 :(得分:1)

  1. 限制服务总线触发器的maximum concurrent calls

    host.json中,添加配置以限制并发性(即默认情况下,您看到的16 messages at once)。以v2函数为例。

    {
      "version": "2.0",
      "extensions": {
        "serviceBus": {
            "messageHandlerOptions": {
                "maxConcurrentCalls": 8
            }
         }
      }
    }
    
  2. 限制Function host instances count。当主机向外扩展时,每个实例都有一个Service Bus触发器,该触发器按上述设置并发读取多个消息。

    如果触发器位于专用的App服务计划上,则实例中的规模将计为某个较小的值。对于消费计划中的功能,请添加具有合理值(<= 5)的App设置WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 。当然,我们可以将count设置为1以便严格控制行为。

  3. 如果我们可以控制消息的发送方式,请schedule the incoming messages以帮助降低请求率。

  4. 使用static clients重用与服务器S1的连接。