急:使用webservice方式跟第三方通讯时超时【java.net.ConnectException: Connection timed out】

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急:使用webservice方式跟第三方通讯时超时【java.net.ConnectException: Connection timed out】相关的知识,希望对你有一定的参考价值。

急:使用webservice方式跟第三方通讯时超时【java.net.ConnectException: Connection timed out】,由于我们调对方的接口有好多,唯独这一个接口隔几天会出现这种情况,我们系统日志看到报文已发送,对方日志确没收到任何报文,很郁闷的问题,不知道从哪下手,。。

参考技术A 1.在服务器端查看端口占用情况是不是有的连接是Close_Wait状态
2.看一下服务器端这个接口是不是造成线程阻塞追问

这个情况是我们生产环境上才出现的问题,没法实时跟踪,能从服务器上的哪些历史日志看到么?

追答

服务器端不是你们维护?从你的描述上看我感觉是服务器端的问题,想办法和服务器维护人联系吧

追问

服务器端的问题???,我们这边有负责服务器的同事,但是不知道要从哪个地方查找原因

参考技术B 把超时异常trycatch,再catch内判断是否已发送,没有就再调用一次这个方法。保存记录时要确保确实发过去了才保存,不然就一直递归调用 参考技术C 第三方没有收到报文不是你的问题了,是第三方请求连接超时了,应该让第三方延长请求超时时间。追问

可是这个接口也不是每次都这样,大部分还是成功的,就是偶尔会出现这种超时的状况

追答

默认情况下webservice超时时间是90秒,偶尔出现,我估计是因为并发量大时,这个接口请求超出了超时时限,所以就出现了上述问题。你说你已经发给第三方数据了,而第三方未接收到,这个明显是第三方接收数据通讯超时,是第三方调你,怎么会是你超时呢,所以你首先确认下他们出现这个情况是持续请求多久的时候报超时异常的,然后适当的调整超时时限,应该就能解决了

追问

是我们请求第三方的,从我们这边出现这种情况的日志上看到的,全都是9秒之后就报【java.net.ConnectException: Connection timed out】超时了,

追答

是你连接他们,9秒后你这边报超时,而他那里没有任何日志,也就是说根本就没有联通第三方,应该不上你这边超时,9秒就超时,就说明第三方连接已经不通了,是他们第三方的问题,有点怀疑第三方有没有做过压测

oracle闲置超时,怎么样重新连接(急)

用的是数据源,当长时间不操作时,突然查询,会报ORA-02396: exceeded maximum idle time, please connect again错,不能修改oracle中配置以及数据源的配置;就是说我用try catch捕获到这个查询异常后,怎么样再次用JAVA代码重新恢复登录查询

原因:
1、EF 、EFCore 中默认存在链接池,每次数据库操作完成之后,会将连接丢到连接池。连接的释放过程单独管控(这里不做详细解释);
2、当Oracle数据库中设置有连接(会话)有效期时,到期后,Oracle服务端会中断连接,并将会话标识为:SNIPED状态;

注:查询数据中已超时,未释放的会话:select * from v$session where status = 'SNIPED';
3、当Oracle数据库中连接超时后,EF连接池中的连接依然存在,若再次进行数据库操作,则会提示 idle 超时异常;
解决方案:
方案1:调整数据库设置,将数据库中的“IDLE_TIME”设置未“UNLIMITED”,具体方式请自行百度;
可通过以下语句查看当前设置:
select username, b.* from dba_users a, dba_profiles b where a.profile = b.profile and username='IOT_SUB_ALL';
方案2:
在项目代码数据库连接字符串中添加:min pool size=0;设置,将EF连接池最小连接保持数设置为0(默认为1);
连接字符串样式:
"User Id=用户id;Password=密码;Data Source=IP:端口/服务器名;min pool size=0;"
连接字符串参数详细说明见:
https://docs.oracle.com/database/121/ODPNT/OracleConnectionClass.htm#ODPNT805
参考技术A 因为你使用的用户被设置了最大空闲时间的profile
建议你如果远程数据库的用户profile设置不能改,那每次使用完dblink后,及时关闭
用的时候再打开追问

说的很对,但是我的那个白天使用频繁,所以不能采纳使用完后及时关闭,只能想想报了这个错,怎么用JAVA重新登录一次,有样例吗,不胜感激

追答

你代码里的connect to数据库的那句话重新run下就好,连接语句可以重复执行

追问

我用的是JDBC,jdbcTemplate.getDataSource().getConnection()获取到connection,后面怎么弄,简单举个例子,辛苦了

本回答被提问者采纳
参考技术B 再次调用getConnection()获取连接就可以了 参考技术C 重新连接一下

以上是关于急:使用webservice方式跟第三方通讯时超时【java.net.ConnectException: Connection timed out】的主要内容,如果未能解决你的问题,请参考以下文章

CloseableHttpClient设置超时

axis2 调用 webService 报超时错误 org.apache.axis2.AxisFault: Connection reset

c# WebService 接收参数 急!!!急!!!

接口接口开发+SpringBoot

java客户端调用webservice时 连接超时知道是网络原因 ,如何重试如果不重试程序就死琐了,

android使用Ksoap2访问WebService时,是不是可以设置超时(Timeout)?