0

我正在使用 wsdl2java 生成的 Axis 2 (1.6.1) java 客户端。

它似乎工作正常,但有时我会收到以下错误:

14:38:04,855 信息 [HTTPSender] 无法将 ViaPost 发送到 url [...]

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:755)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)

我想知道这是否可能是一个多线程问题,并希望得到一些关于此事的答案。我使用缓存 HttpClient 的存根。HttpClient 使用 MultiThreadedHttpConnectionManager,我将 setDefaultMaxConnectionsPerHost 设置为 20。

我知道 HttpClient 凭借关联的 MultiThreadedHttpConnectionManager 将是线程安全的。问题是 Axis2 存根会发生什么?存根也会是线程安全的吗?

我看过一些帖子,其中指出 Axis 存根在设计上不是线程安全的。如果是这样,使用多线程 HttpClient 有什么好处?如何确保 Axis 客户端存根在多线程环境中可用?

谢谢

4

1 回答 1

0

“连接重置”错误意味着服务器意外关闭了连接。当您收到该错误时,问题出在远程服务器上,而不是您的客户端。

MultiThreadedHttpConnectionManager 是用于 HTTP 连接的多线程安全缓存。多个线程可以从缓存中获取连接或将它们返回到缓存,而缓存不会成为瓶颈。单个 HttpClient 或拥有 HttpClient 的存根一次只能由一个线程使用。HttpClient 拥有与远程服务器的实际 TCP 连接,并且该连接一次仅支持一个正在进行的请求。

于 2012-06-30T10:11:12.313 回答