Spring WS and MultiThreadedHttpConnectionManager



我在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

WebServiceMessageSender接口有两个实现,用于通过HTTP发送消息。[...]替代方案是CommonsHttpMessageSender,它使用Jakarta Commons HTTPClient。

当服务器端使用Spring WS时,根本不需要HttpClient。在这种情况下,是Servlet容器提供HTTP(服务器)抽象。查看您的tomcat配置,也许线程池太小,有些请求排队?HttpClient在这里绝对无事可做。对不起,但是您必须在其他地方寻找问题。

只是为了使答案完整,当您使用Spring WS访问其他计算机上的肥皂服务时,HttpClient的以下设置应用:

  • maxConnectionsPerHost-允许多少个并发连接HttpClient保留到同一主机(请参阅:Keep-Alive标题)?大多数浏览器将并发连接的数量限制为同一主机的2/4/8。HttpClient遵循该行为,因此,原则上,您不能比2/4/8(在此处设置的任何设置)并发连接到同一主机。

  • maxTotalConnections-喜欢上述,但总体总体总计。如果您要连接到不同服务器上数百个不同的Web服务,则这是开放连接的总数HttpClient可以保持

相关内容

  • 没有找到相关文章

最新更新