mr.*_*don 1 java spring multithreading httpconnection tomcat7
我在Spring WS 2.1.0上有一个Web服务.Web服务在Tomcat 7上运行,并使用一种事务方法实现端点,该方法从数据库读取数据并生成不同的报告.Tomcat 7通过JServ协议在Apache Server后面运行.
在通过Apache JMeter进行压力测试期间,我得出结论,同时处理请求是串行处理的.起初我试图调整数据库连接池(commons-dbcp和更高版本的tomcat-jdbc),但结果是一样的.端点方法只读取数据,因此没有读后读或写后读依赖,并且可以并行处理事务.因此问题在于HTTP连接处理.
经过一些搜索(当然还有谷歌搜索),我发现Spring WS附带了单线程的默认连接管理器(SimpleHttpConnectionManager).好的做法是用MultiThreadedHttpConnectionManager替换SimpleHttpConnectionManager.我找到了如下所示的示例代码:
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg>
<bean class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager>
<property name="maxConnectionsPerHost" value="20"/>
<property name="maxTotalConnections" value="100"/>
</bean>
</constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)
但是这个例子对我来说并不是很清楚,因为我不明白Spring如何使用HttpClient(指代ID或自动装配它).那我怎么能在我的案例中使用MultiThreadedHttpConnectionManager和Spring?我应该在哪里注入此类的已配置实例?
你误解了用法HttpClient.它仅在Spring WS 客户端模块中用于启动HTTP连接,请参见6.2.1.1.1.HTTP传输:
有两种
WebServiceMessageSender用于通过HTTP发送消息的接口实现.[...]替代方案是CommonsHttpMessageSender使用Jakarta Commons HttpClient.
HttpClient在服务器端使用Spring WS时根本不需要.在这种情况下,它是提供HTTP(服务器)抽象的servlet容器.查看您的Tomcat配置,可能是线程池太小而某些请求已排队?HttpClient在这里绝对无事可做.对不起,你必须在其他地方寻找问题.
为了保持答案的完整性,当您使用Spring WS访问其他计算机上的SOAP服务时,HttpClient应用以下设置:
maxConnectionsPerHost- HttpClient允许多少并发连接保留到同一主机(请参阅:Keep-Alive标头)?大多数浏览器将同一主机的并发连接数限制为2/4/8.HttpClient遵循这种行为,所以原则上你不能有超过2/4/8(无论你在这里设置)与同一主机的并发连接.
maxTotalConnections - 像上面一样,但总共给所有主机.如果要连接到不同服务器上的数百个不同的Web服务,则这是HttpClient可以保留的打开连接的总数
| 归档时间: |
|
| 查看次数: |
5463 次 |
| 最近记录: |