业务场景
钉钉端发起审批流程后,会回调开发者后台的callback接口,然后callback接口逻辑处理时会对一些数据做入库处理,但是突然发现数据库中出现了很多重复的数据
问题发现
业务代码进行断点,发现并无异常,就是一条insert按理说就应该入库一次,初次问题排查失败。
然后去查日志将插入数据的日志拉出,发现打出的info日志中,出现了多条线程跑入数据的情况,如下:http-nio-10888-exec-线程,分别出现了9、5、8、7、2
然后怀疑多线程,但是查询业务代码后发现并没有多线程的写法。
最后在同事的提醒下,怀疑可能是callback接口响应时间太长,导致钉钉方以为接口调取失败了,触发了重试机制,再次对callback接口发起了请求,故而出现了这种多线程请求的情况。
然后对各处业务代码加日志,打印时间。
果不其然,发现了有一处地方调用时间长达7000+ms,把这个地方代码修复后(干掉),程序恢复正常!
警示!!!
写代码调取三方接口或者写一些逻辑复杂的处理时,一定要进行日志打印,并且将一些重要的参数打印清楚,否则将大大增加后期排查时间成本。