org.apache.axis2.AxisFault: Timeout waiting for connection

问题背景:

RPCServiceClient在调用webService接口调用的时候,如果一段时间内访问量过多,就会出现

org.apache.axis2.AxisFault: Timeout waiting for connection 链接超时问题,一开始以为网络原因,但这个问题出现的频次有点多,只要访问量一多就直接Timeout waiting for connection。

调用的收使用axis2 是1.7  ,查阅网上相似问题,很多解答是这个是1.5.1之后的一个bug.

解决办法:

1、版本降到 1.5 就可以解决。(认为不是好的解决办法)

2、参考别人的例子:

在代码中加入一些配置可以得到解决。

RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
//设置采用https协议
final SSLContext sslCtx = SSLContext.getInstance("TLS");
sslCtx.init(null, new TrustManager[]{new TrustAllTrustManager()}, null);
options.setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER, new Protocol("https",
                (ProtocolSocketFactory) new SSLProtocolSocketFactory(sslCtx), 8443));
options.setTimeOutInMilliSeconds(100000);
//解决连接超时
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, true); 
//解决连接超时
options.setManageSession(true);  
EndpointReference epf = new EndpointReference(address);
options.setTo(epf);


QName qName = new QName(queryUrl, "productRegistration");
Object[] response = client.invokeBlocking(qName, new Object[]{user, pwd, scatteredInvestString}, new Class[]{String.class});
//解决连接超时
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, true); 
options.setManageSession(true); 

client.cleanupTransport();

加入的代码有三行:

options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, true); 
options.setManageSession(true); 

client.cleanupTransport();

但是第二中方法如果数据量过多还是报 Timeout waiting for connection  



你可能感兴趣的:(java)