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));

 

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值