我在Spring WS 2.1.0上有一个Web服务。Web Service在Tomcat 7上运行,并使用一种交易方法实现端点,该方法从数据库中读取数据并生成不同的报告。Tomcat 7通过JServ协议在Apache Server后面运行。
在通过Apache Jmeter的压力测试期间,我得出结论,同时处理了串行请求。首先,我尝试调整数据库连接池(Commons-DBCP和后来的Tomcat-JDBC),但结果是相同的。端点方法仅读取数据,因此没有读取后写入或书面读取依赖项和交易可以通过并行处理。因此,问题是在HTTP连接处理中。
经过一些搜索(当然是谷歌搜索),我发现Spring WS附带了单线螺纹的默认连接管理器(SimpleHttpConnectionManager)。好的做法是用MultineReadHttpConnectionManager替换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>
但是,这个示例对我来说并不清楚,因为我不明白Spring是如何使用HTTPCLIENT(指ID或自动将其自动使用)。那么,在我的情况下,如何使用Spring使用MultiThreadHttpConnectionManager?我应该在哪里注入此类的实例?
您正在误解HttpClient
的用法。仅在Spring WS 客户端模块中使用它来启动HTTP连接,请参见 6.2.1.1.1。HTTP Transperts :
当服务器端使用Spring WS时,根本不需要
WebServiceMessageSender
接口有两个实现,用于通过HTTP发送消息。[...]替代方案是CommonsHttpMessageSender
,它使用Jakarta Commons HTTPClient。
HttpClient
。在这种情况下,是Servlet容器提供HTTP(服务器)抽象。查看您的tomcat配置,也许线程池太小,有些请求排队?HttpClient
在这里绝对无事可做。对不起,但是您必须在其他地方寻找问题。
只是为了使答案完整,当您使用Spring WS访问其他计算机上的肥皂服务时,HttpClient
的以下设置应用:
maxConnectionsPerHost
-允许多少个并发连接HttpClient
保留到同一主机(请参阅:Keep-Alive
标题)?大多数浏览器将并发连接的数量限制为同一主机的2/4/8。HttpClient
遵循该行为,因此,原则上,您不能比2/4/8(在此处设置的任何设置)并发连接到同一主机。maxTotalConnections
-喜欢上述,但总体总体总计。如果您要连接到不同服务器上数百个不同的Web服务,则这是开放连接的总数HttpClient
可以保持