做卡项目的时候 我们消费还款都是后端controb调用定时任务执行的 方法是定时3分钟消费200条数据 前期项目量少的时候消费都是正常的 当后面数据量大的时候 sql执行效率越来越慢 刚好有一次碰上调用第三方响应比较慢 导致超过3分钟进程还没执行结束 另一个进程又开启了 这样新的进程又在处理上一个进程 这样导致重读消费了 重大生产事故了
解决办法
定时多进程执行 每个进程执行订单号不一样的数据 这样能保证不积压消费数据
每个进程开启的时候启动锁 结束的时候解锁 这样相同类型的进程启动的时候就要判断锁存不存在 存在的话进程不开启 redis设置过期时间 这样就不会有死锁的存在
时间充裕的时候就引入队列来消费了 队列的优势 解耦 不会出现重复消费 对队列同时执行
反思 对未出现的问题没有预支 编程要全面考虑可能出现的问题