【问题标题】:Spring WS and MultiThreadedHttpConnectionManagerSpring WS 和 MultiThreadedHttpConnectionManager
【发布时间】:2012-10-23 22:12:43
【问题描述】:

我在 Spring WS 2.1.0 上有一个 Web 服务。 Web 服务在 Tomcat 7 上运行,并使用一种事务方法实现端点,该方法从数据库读取数据并生成不同的报告。 Tomcat 7 通过 JServ 协议在 Apache Server 后面运行。

在通过 Apache JMeter 进行压力测试期间,我得出结论,同时请求是串行处理的。起初我尝试调整数据库连接池(commons-dbcp 和后来的 tomcat-jdbc),但结果是一样的。 Endpoint 方法只读取数据,因此没有 read-after-write 或 write-after-read 依赖关系,事务可以并行处理。因此问题在于 HTTP 连接处理。

经过一番搜索(当然还有谷歌搜索)后,我发现 Spring WS 带有默认的单线程连接管理器(SimpleHttpConnectionManager)。好的做法是将 SimpleHttpConnectionManager 替换为 MultiThreadedHttpConnectionManager。我发现示例代码如下所示:

<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 或自动装配它)。那么在我的情况下,如何将 MultiThreadedHttpConnectionManager 与 Spring 一起使用?我应该在哪里注入这个类的配置实例?

【问题讨论】:

    标签: java multithreading spring tomcat7 httpconnection


    【解决方案1】:

    您误解了HttpClient 的用法。仅在 Spring WS client 模块中用于发起 HTTP 连接,见6.2.1.1.1. HTTP transports:

    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 可以保持的打开连接总数

    【讨论】:

    • 感谢您的帮助。我对尝试在服务器端使用 MultiThreadedHttpConnectionManager 感到非常困惑。我关于处理 HTTP 请求的假设是错误的,因为经过几个小时调试不同部分的代码后,我发现问题出在某些 3rd 方库中。他们从远程安全存储读取数据,没有任何导致顺序请求处理的缓存
    猜你喜欢
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多