记录自己的bug

挂一个今天的bug

项目背景:

同步区块高度,获取当前交易内容,检查是否有本平台内交易。

发生问题:

问题1、用户充值迟迟没有到账。
问题2、经检查发现,获取区块高度的定时方法(1次/min)突然不执行了。中间存在7分钟的空没执行,后续其他方法正常执行,获取区块高度方法不执行。

过程

检查日志,发现半夜突然莫名的后台管理登录接口访问。
在这里插入图片描述
发现大概率爬虫,暂时不管了。

继续检查,发现了报错
在这里插入图片描述
以为是定时任务挂掉了。好奇为什么定时任务挂了之后就不再执行,然后查csdn。。。

发现springboot的定时任务是单线程的,好吧。按照文档改为多线程。
传送门:https://blog.youkuaiyun.com/qq_31868149/article/details/88579082
在这里插入图片描述

继续查看代码,发现在报错的位置加了try-catch,那讲道理线程应该不会挂掉。

在这里插入图片描述
ps:当时偷懒,就把区块高度写成静态变量,如果程序启动,静态变量为null,区块高度为当前获取的区块高度,然后再去查询发生的交易(也就是说,服务停止的期间,交易就不管了)

因为在获取当前区块高度的时候,如果没拿到区块高度,就返回0。。。
在这里插入图片描述
方法执行后。。系统记录的区块高度就从10433272,变成了0。。。

下一次执行的时候,网好了。。。。崩溃之路开始了。。。
在这里插入图片描述
找每一个区块的内容。。。。然后判断交易。。。
在这里插入图片描述

又因为单线程定时任务。其他定时任务都不跑了。。。傻傻等待。

总共解决。。。。
1、定时任务改成多线程了
2、老老实实把区块高度记在数据库里
3、如果再拿不到高度,还是返回0,但是不写数据库。

完结。。。

第一次发帖,轻喷,谢谢各位大佬。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值