昨天,提交了一个订单撤销发送短信的需求。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));
补充:在此之前,上网查过此类问题。不过还是具体问题具体分析。在此记录,又遇到此类问题的朋友,希望有所帮助,同时作为自己工作过程中的解决问题的一个宝贵财富保留
相关推荐
**Hessian:深入理解与应用** Hessian是一种二进制Web服务协议,它由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation,RMI)服务。Hessian的目标是简化分布式系统...
解决这些问题通常需要检查服务端和客户端的配置,确保URL正确,服务正常运行,以及Hessian库版本匹配。此外,对于序列化异常,可能需要检查对象是否可序列化,或者使用Hessian的自定义序列化类。 总的来说,Spring...
这包括设置服务器端和客户端的Hessian服务,定义服务接口,处理序列化和反序列化的过程,以及调试可能出现的问题。在进行版本升级时,要注意兼容性问题,确保旧版本的服务仍能正常工作,同时充分利用新版本带来的...
Hessian是一种高效的二进制序列化协议,常用于实现轻量级的远程过程调用(RPC)。这个案例涉及到了Hessian在Java和Python之间的跨语言通信。以下是对Hessian技术及其应用的详细解释: 1. **Hessian简介**:Hessian...
Hessian是一种二进制Web服务协议,由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation, RMI)机制。它结合了HTTP协议的可扩展性和Java序列化机制的易用性,使得在...
在优化问题和机器学习中,Hessian正则化是一种通过引入Hessian矩阵的逆来改善模型稳定性的方法。在非线性时间序列模型中,Hessian正则化可以增强模型的识别能力和预测准确性,同时减少过拟合的风险。 二、Matlab...
《Hessian应用详解》 Hessian,一种轻量级的二进制协议,因其高效、简单的特点,在分布式服务中被广泛应用。它允许开发者在HTTP上透明地调用远程方法,就像是本地方法调用一样,极大地提高了开发效率和系统性能。...
Hessian提供了一定的兼容性策略,但开发者仍需谨慎设计服务接口,避免因版本变化导致的不兼容问题。 8. **性能优化**: Hessian服务端的性能可以通过多种方式优化,例如减少不必要的数据序列化,优化网络通信,...
这样设计的好处是可以同时检测到不同尺寸的特征,避免了单一尺度可能遗漏重要信息的问题。 在MATLAB环境中,我们通常会使用一系列的函数来实现这一过程。比如`imgaussian.m`是用于高斯滤波的,它可以帮助去除噪声并...
- 考虑安全性问题,Hessian默认不加密传输,可以通过HTTPS或自定义Filter增强安全性。 通过上述配置,我们可以实现Spring中基于Hessian的RPC通信,使得服务间的调用变得高效且简单。`HelloHessianService`和`...
在IT行业中,Hessian是一种流行的二进制RPC(Remote Procedure Call)协议,它允许服务器和客户端之间高效地交换数据和调用...结合源码和工具,可以深入探究Hessian的内部机制,优化性能,以及解决实际开发中的问题。
在IT行业中,Hessian是一种轻量级的二进制序列化协议,主要用于远程方法调用(RMI)和Web服务。Hessian由Caucho Technology开发,它的设计目标是提供比XML更快、更简洁的数据传输方式,从而提高网络通信效率。在Java...
在IT领域,尤其是在医学图像分析中,Hessian矩阵是一个重要的数学工具,用于图像特征检测,特别是在血管分割的应用中。本文将深入探讨标题和描述中提到的"基于Hessian矩阵增强的心血管分割"这一主题。 Hessian矩阵...
SpringMVC 和 Hessian 是两种在 Java 开发中常见的技术,它们在构建分布式系统时扮演着重要角色。SpringMVC 是 Spring 框架的一部分,主要用于构建 Web 应用的 MVC(模型-视图-控制器)架构。而 Hessian 是一种轻量...
Hessian是一种二进制协议,它被设计用于提高远程调用的...通过学习和实践这个Hessian demo,你将能够更好地应对涉及远程调用和数据交换的问题。无论是Java开发者还是C++开发者,Hessian都是值得了解和掌握的一项技术。
尽管Hessian简化了服务间的通信,但也需要注意安全性问题: 1. **认证与授权**:为了防止未授权的访问,需要在服务端设置合适的认证机制。 2. **数据加密**:传输的数据如果不进行加密,可能会被截获,因此在敏感...
System.out.println(service.sayHello("World")); } } ``` 以上就是Java Hessian的基本使用方法。Hessian虽然简洁高效,但在安全性、版本控制和错误处理等方面存在一定的局限性。在实际应用中,开发者需要根据...
- 在实际开发中,我们可能会需要编写一些辅助工具类来处理Hessian的相关操作,例如Hessian2Input和Hessian2Output,它们用于读写Hessian序列化的二进制流。 6. **安全性与优化**: - 虽然Hessian协议效率高,但其...
在IT行业中,尤其是在移动开发领域,Hessian是一种广泛使用的二进制协议,它允许远程对象调用(Remote Object Invocation)。本知识点主要关注的是在Android平台上,如何使用Hessian进行异步请求访问,以便提高应用...
Hessian的出现旨在解决XML-RPC在数据传输时过于冗重的问题,它采用二进制编码,使得数据传输更高效。本文将深入探讨Hessian的核心概念、工作原理,并提供一个简单的使用示例。 ### Hessian核心概念 1. **二进制...