如何在Http入站网关中同时接受固定数量的请求?

时间:2018-10-02 08:49:54

标签: spring-boot tomcat concurrency spring-integration

我正在使用Tomcat,并且将http:inbound-gateway作为网关,并将名为request的通道配置为其请求通道。有时,我的服务上有很多请求,这些请求导致发生Too many open files来自操作系统的错误。 我试图将request频道设为QueChannel并为其设置容量,但是它不起作用。然后,我尝试将request通道设置为轮询用户通道,并设置一个具有固定延迟的轮询器以进行轮询,但是该通道不再起作用。有限制输入请求数量的常规方法吗? 以及如何自定义已丢弃请求中的响应?

<int:channel id="request">
  <int:queue capacity="100"/>
</int:channel>    
...
<int-http:inbound-gateway id="RESTServiceGateway"
                        supported-methods="GET"
                        request-channel="request"
                        error-channel="errorResolver" />

<int:chain input-channel="request" output-channel="response">
<int:poller fixed-delay="1" max-messages-per-poll=""/>
...

<task:executor id="requestExecutor" pool-size="1-10" queue-capacity="10"/>
<int:channel id="request">
    <int:dispatcher task-executor="requestExecutor"/>
</int:channel>
<int-http:inbound-gateway id="RESTServiceGateway"
                        supported-methods="GET"
                        request-channel="request"
                        error-channel="errorResolver" />

<int:chain input-channel="request" output-channel="response">
...

1 个答案:

答案 0 :(得分:1)

Message: Failed to find data source: com.databricks.spark.xml. Please find packages at http://spark.apache.org/third-party-projects.html ... 与您的集成流配置无关。这是关于从HTTP客户端到Tomcat的打开的套接字。这个已经是并发的,可以并行处理许多请求。因此,我要说的是,流中的并行逻辑不会带来太多价值,并且绝对不会影响许多打开的套接字。

您可以通过maxConnections in server.xml在Tomcat中配置并发性。

另一个选择是使用Too many open files工具https://www.tecmint.com/increase-set-open-file-limits-in-linux/

为Linux上那些打开的文件增加数量。