昨天,提交了一个订单撤销发送短信的需求。QA的同事在测试该问题的时候,发现原来的代客下单给用户发送短信的功能也不好用。最后通过追踪QA服务器上的日志文件,发现日志中并没有找到要发送短信人的信息。
这个问题,我同时在DEV的环境上进行了复测。令人意想不到的是DEV环境的数据竟然可以返回。这就让我觉得很诧异。同样的代码为什么会有不一样的数据返回呢?
今天一上班来到公司就赶紧的打开电脑,追踪这个问题。想到写一个单元测试,测试RPC接口是否可以成功返回数据,代码如下:
HessianProxyFactory factory = new HessianProxyFactory(); factory.setChunkedPost(false); factory.setOverloadEnabled(false); factory.setReadTimeout(15000); long start =System.currentTimeMillis(); Interface xxx=null; try { xxx= (Interface) factory.create(Interface.class, "url"); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } List<xxx> xxx= xxx.getxxx(参数1,参数2); System.out.println("xxxx cost time:"+(System.currentTimeMillis()-start));
出于保密的原因,故重要的代码已经改掉。
大家看一下代码的两个地方:factory.setReadTimeout(15000) 和 xxx= (Interface) factory.create(Interface.class, "url");
一个代表设置他的超时时间,另一个重点指出的是这的url是我DEV环境的url,执行单元测试,成功返回结果
这时候把url的地址换成QA的地址,其他的地方不变。看一下执行结果:
为什么在DEV环境可以正常返回,而在QA环境却超时呢???
赶紧找运维的同事 去追查了一下这个问题 发现QA和DEV上的tomcat的配置参数不一样(该配置就不上图了),然后把QA环境中的数据拷贝到DEV环境一份。重启服务,再次在dev url上执行该单元测试,完美返回。又一次失败,哎。。。。
再次咨询公司的架构同事,他给了一个建议,让我在方法调用前后打印一下执行时间。好,马上照办。
首先注释掉这行代码:
添加如下两行代码:
打印一下执行时间,如下:
我擦,原来时间比我上面代码中设置的要大,进一步知道QA的数据量比较大,导致接口数据返回比较慢,故最终的解决方案:加大超时时间设置
上一下完整的最终代码片段:
HessianProxyFactory factory = new HessianProxyFactory(); factory.setChunkedPost(false); factory.setOverloadEnabled(false); factory.setReadTimeout(20000); long start =System.currentTimeMillis(); xxx yyy=null; try { yyyyy= (xxxxx) factory.create(xxxx.class, "url"); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } List<ooo> pUsers = xxxxx.getxxxxx(arg1, arg2); System.out.println("cost time:"+(System.currentTimeMillis()-start));
补充:在此之前,上网查过此类问题。不过还是具体问题具体分析。在此记录,又遇到此类问题的朋友,希望有所帮助,同时作为自己工作过程中的解决问题的一个宝贵财富保留
相关推荐
A Hessian Regularized Nonlinear Time Series Model
Hessian多个版本下载,包括Hessian3.1.6,Hessian3.2.1,Hessian4.0.7
该案例有hessian java python,该案例有hessian java python,该案例有hessian java python
hessian源码
hessian资料3hessian资料3hessian资料3hessian资料3hessian资料3
Hessian服务端 入门程序
NULL 博文链接:https://paopaochao3.iteye.com/blog/550771
java hessian-3.0.38.jar。修改了原生的jar包,解决了hessian 序列化BigDecimal的精度问题。注意,请在hessian服务端和客户端中分别替换此jar包哦!! 只替换服务端hessian jar包还是会有问题。
基于Hessian的冠状动脉血管造影分割方法
Hessian案列代码
1、开发环境:eclipse3.1 + jdk1.5; 2、样例说明: 1)spring + hessian; 2)hessian。 3、样例内容: 1)HashMap传递; 2)简单对象传递; 3)异常处理
Hessian android客户端异步请求访问包
hessian4.0.37.jar
hessian 服务端 客户端 可运行
NULL 博文链接:https://wo-niu.iteye.com/blog/2200720
dubbo-hessian协议http请求demo
多尺度hessian滤波器,图像增强,参考frangi的论文
hessian是一个轻量级的Java Remoting方案
hessian关于java使用的一个小例子
一个简单的Hessian,简单介绍了Hessian的使用方式,介绍了Hessian和Spring集成的使用方式,以及单独使用Hessian的方式。