车次缺失问题排查

5.10上线一版之后,在5.19号听到客户有反馈有些车次没有和12306进行同步,我很好奇,是数据没有抓下来么?还是12306接口返回结果又有什么变化么?

我在本地以及测试环境上查询相关车次均能够正常显示,首先排除了12306返回的结果问题,应该是自己的代码哪里没有处理好,造成车次丢失,可是没有办法正确定位问题。

5.15号团建回来第一天上班,出现了好几单这个问题,有一个Z29的车次映入眼帘,由于只能使用ELK查看日志,不是很方便还有延迟,但是怀着试试的心态,我调用这个接口,赶快查看日志,输入关键字Z29调节时间到最近,搜索,哇塞,出现了,报了一个匹配车次的异常。ok,有异常出现,那么下面就是排查问题了,后面跟着nullpointer,可惜堆栈没有打出来,不过参数打印出来了,根据打印日志找到相关的代码,排查一下,最后定位到是反刷结果的时候出现的问题,在用户成功下单后,会把真的下单结果反刷给dtc,由于算下铺的时候需要用到硬座,但是Z29这种车是没有硬座的,于是出现空指针异常,判断没有判断到位,造成有相关车次的丢失。

于是修改代码,将线上的反刷缓存放到测试redis里面,在用我们自己的程序跑一下,果然报错了,并且丢失了那个车次,于是根据问题,修改代码,修复了这个问题。

最近再彻底重构DTC数据中心的代码,有的地方重构出现没有考虑完整的情况,造成此类问题的发生,希望以后引起注意,勿再发生。