欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hessian 500 read time out问题

程序员文章站 2022-06-25 23:18:45
...

         昨天,提交了一个订单撤销发送短信的需求。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,执行单元测试,成功返回结果


hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 


 这时候把url的地址换成QA的地址,其他的地方不变。看一下执行结果:


hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 
 为什么在DEV环境可以正常返回,而在QA环境却超时呢???

赶紧找运维的同事 去追查了一下这个问题 发现QA和DEV上的tomcat的配置参数不一样(该配置就不上图了),然后把QA环境中的数据拷贝到DEV环境一份。重启服务,再次在dev url上执行该单元测试,完美返回。又一次失败,哎。。。。

 

    再次咨询公司的架构同事,他给了一个建议,让我在方法调用前后打印一下执行时间。好,马上照办。

首先注释掉这行代码:


hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 


 添加如下两行代码:

hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 
 打印一下执行时间,如下:


hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 
 我擦,原来时间比我上面代码中设置的要大,进一步知道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));

 

 

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

  • hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 
  • 大小: 30.5 KB
  • hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 
  • 大小: 756.3 KB
  • hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 
  • 大小: 91.3 KB
  • hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 
  • 大小: 269.9 KB
  • hessian  500  read time out问题
            
    
    博客分类: javaRPC分布式系统架构 java工作单元测试 
  • 大小: 50.4 KB