挂一个今天的bug
- 项目背景:
- 发生问题:
- 过程
项目背景:
同步区块高度,获取当前交易内容,检查是否有本平台内交易。
发生问题:
问题1、用户充值迟迟没有到账。
问题2、经检查发现,获取区块高度的定时方法(1次/min)突然不执行了。中间存在7分钟的空没执行,后续其他方法正常执行,获取区块高度方法不执行。
过程
检查日志,发现半夜突然莫名的后台管理登录接口访问。
发现大概率爬虫,暂时不管了。
继续检查,发现了报错
以为是定时任务挂掉了。好奇为什么定时任务挂了之后就不再执行,然后查csdn。。。
发现springboot的定时任务是单线程的,好吧。按照文档改为多线程。
传送门:https://blog.csdn.net/qq_31868149/article/details/88579082
继续查看代码,发现在报错的位置加了try-catch,那讲道理线程应该不会挂掉。
ps:当时偷懒,就把区块高度写成静态变量,如果程序启动,静态变量为null,区块高度为当前获取的区块高度,然后再去查询发生的交易(也就是说,服务停止的期间,交易就不管了)
因为在获取当前区块高度的时候,如果没拿到区块高度,就返回0。。。
方法执行后。。系统记录的区块高度就从10433272,变成了0。。。
下一次执行的时候,网好了。。。。崩溃之路开始了。。。
找每一个区块的内容。。。。然后判断交易。。。
又因为单线程定时任务。其他定时任务都不跑了。。。傻傻等待。
总共解决。。。。
1、定时任务改成多线程了
2、老老实实把区块高度记在数据库里
3、如果再拿不到高度,还是返回0,但是不写数据库。
完结。。。
第一次发帖,轻喷,谢谢各位大佬。