Microsoft Azure,中继绑定和最大并发

时间:2015-02-21 09:52:30

标签: azure azure-servicebusrelay webhttprelaybinding

我已经使用Microsoft Azure设置了ServiceBus中继。我正在使用HTTP后端连接到这个,后端处理传入接收的传入GET和POST请求。

现在,这很好用。我的问题是我可以得到的最大并发数是2个同时发出的请求,即我的后端只会同时收到2个请求,如果有更多的请求,它们将被停止,直到先前的请求被处理为止。完成。我尝试使用服务行为来增加并发性,但这似乎被忽略了,但是将并发性降低到1似乎与设置有关。所以我猜这是实际接力所施加的某种限制!?但真的可以吗?只有2个?在我的场景中,这使得中继不可用,因为请求必须耗费时间处理(2秒),这不能延迟并且需要立即响应。因此,我不能简单地存储请求并像处理队列一样处理它们。

我该如何扩展呢?添加更多继电器并连接到它们全部?

1 个答案:

答案 0 :(得分:1)

您需要将ServicePointManager.DefaultConnectionLimit设置为适当的值以允许更多并发连接。尝试在应用程序代码中尽早执行此操作:

ServicePointManager.DefaultConnectionLimit = int.MaxValue;

这将允许您的应用程序打开无限(实际)数量的并发HTTP连接。


默认限制取决于最初设计HTTP协议的方式。

以下引用来自section 8.1.4 of the HTTP/1.1 RFC

  

单用户客户端不应与任何服务器或代理保持2个以上的连接[...]这些指南旨在改善HTTP响应时间并避免拥塞。

因此,兼容客户端通常必须确保它与单个服务器之间永远不会有两个以上的打开连接。

但是,这已经改变,您可以覆盖此行为。以下引用来自section 6.4 of RFC 7230,它是HTTP / 1.1协议的更新:

  

以前的HTTP修订版提供了特定数量的连接      天花板,但这被发现对许多应用来说是不切实际的。      因此,本规范并未强制要求特定的最大值      相反,鼓励客户      打开多个连接时保守。