首页 > 代码库 > 调用远程服务的超时现象
调用远程服务的超时现象
刚刚做完一个网站项目,网站的显示数据是通过远程服务获取的,过程比较“曲折”,如下图所示。
项目使用spring mvc来开发,其中需要请求rest服务,使用spring提供的RestTemplate类可以很方便的实现rest请求发送和响应结果接收。中间系统属于老版本的系统,采用的是php开发的。在测试过程中,发现网站上的数据显示极其不稳定,时不时地提示远程数据获取失败。使用http监听工具进行了追踪,是中间系统向网站响应的结果是链接超时,导致了网站解析响应结果时没有获取到数据。将中间系统的超时阀值调大后,中间系统可以正确地响应数据,可是网站仍然无法解析数据,后来发现RestTemplate的ReadTimeout设置的值太低,导致未能接受数据。同时将RestTemplate的ReadTimeout的值调大后,一切运行正常。
这里记录、强调的重要一点使我们开发人员的主观意识错误,导致于排除错误时未能快速定位错误原因。为什么这么说呢?网站使用的是spring mvc,RestTemplate的ReadTimeout值设置的为5秒,开发人员个人觉着拿到数据为null的响应没有等到5秒啊,怎么会超时呢?同样,中间系统是php开发的,而php开发人员设置的超时时间为15秒,也是个人觉着15秒拿数据怎么也够了呀,怎么会超时呢?
让真实数据和实践来说话!http监听工具可以查看每次请求的timeline,两个系统的开发人员分别仔细观察了各自请求的时间,平均在19秒左右!
说到这里,其实最想说明是,不要被我们自己的主观意识蒙蔽了双眼。为什么会出现上述的现象?在项目开发后期,特别是时间吃紧的状况下,开发人员在调试诸多问题的过程中,很容易地就想当然了,忽略了解决问题的本质。只有通过对真实数据的分析及实践操作,才能准确快速地找到问题原因!
所以,在任何情况下,一定要养成冷静思考的好习惯,一定要充分利用调试工具的功能,千万不要自己觉着!