昨天升级乌市水流域APP接口的过程中,APP接口(获取站点历史数据)在测试过程中,相同的参数传入,有时测试通过,有时测试不通过。代码在开发环境经过多次测试,并没有发现相同的问题,多次升级生产环境后,问题并没有得到解决。
正常情况:
出错情况:
- 2、问题分析
通过请教领导,得知问题原因可能是因为存在多个相同的服务注册到了同一个zookeeper中,接口在调用服务时,有时调用到这个服务(更新后发布的data服务,bug已修复),有时调用到另一个服务(更新前发布的data服务,存在bug)。
- 3、问题跟踪和确认
经过上面的分析,我们打开了更新后发布的data服务的实时日志,然后测试接口,发现在接口测试通过的时候,日志中打印出来了查询的sql,接口测试失败时,日志中没有打印任何的日志(在公司的系统框架中,调用dao接口查询数据都会打印出sql)。
通过上面的测试,初步判定为存在更新前的data服务。接下来我们查看了可能存在data服务的所有机器,通过查看结果发现确实有多个机器发布了data服务,其中除最后发布的data服务外,其余的data服务都是不小心发布的(data服务是一个jar包,在windows服务器中,如果配置了jdk,双击jar包就可以运行)。
4、问题解决
关闭不小心发布的data服务,经过多次测试,没有发现时好时坏的问题。问题得到解决。
在以后的开发中,如果发现同样的问题,很可能是因为同一个服务发布了多次,即同一个服务存在不同的版本,在这些版本中,有些是没有bug的,而有些则是以前的老版本,存在bug,在接口调用过程中,如果调用到存在bug的服务,则测试失败,如果调用到没有bug的服务,则测试通过。
在以后的开发过程中,如果出现相同的情况,可以通过dubbo-admin查看对应服务的提供者,看一下调用的服务是否存在多个提供者,如图: