Multithreading 无法在Axis2客户端存根上发送ViaPost

Multithreading 无法在Axis2客户端存根上发送ViaPost,multithreading,axis2,stub,Multithreading,Axis2,Stub,我正在使用wsdl2java生成Axis2(1.6.1)java客户机 它似乎工作正常,但有时我会出现以下错误: 14:38:04855信息[HTTPSender]无法将ViaPost发送到url[…] java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at com.sun.net.ssl.internal.ssl.InputRecor

我正在使用wsdl2java生成Axis2(1.6.1)java客户机

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

14:38:04855信息[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使用多线程HttpConnectionManager,我将setDefaultMaxConnectionsPerHost设置为20

我理解,通过关联的多线程HttpConnectionManager,HttpClient将是线程安全的。 问题是Axis2存根会发生什么情况?存根也是线程安全的吗

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

谢谢

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


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

感谢您的回复。如果客户机coed没有问题,我想这会让我松一口气。假设存根不是线程安全的,我真的有三个选择:1。每次我提出请求时创建/销毁存根2。使用ThreadLocal存根或3。同步对存根的共享实例(或实例池)的访问。ThreadLocal选项对CPU的影响最小,但可能会在具有大型线程池的服务器上显著增加内存占用。另外两个可以将内存占用降至最低,但需要更多的CPU。根据您的经验,您会推荐一种方法吗?非常感谢。