`

hessian 500 read time out问题

阅读更多

         昨天,提交了一个订单撤销发送短信的需求。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));

 

 

补充:在此之前,上网查过此类问题。不过还是具体问题具体分析。在此记录,又遇到此类问题的朋友,希望有所帮助,同时作为自己工作过程中的解决问题的一个宝贵财富保留

  • 大小: 30.5 KB
  • 大小: 756.3 KB
  • 大小: 91.3 KB
  • 大小: 269.9 KB
  • 大小: 50.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics