基于redis分布式锁定时任务执行两次的解决方案
现象: 定时任务每隔五分钟群发送报警信息发送两次,导致信息量太大,容易被刷爆
原因:定时任务的逻辑是调用异步方法执行,导致已获取的锁被快速释放,第二台机器也有机会获取锁,两台机器都执行了,导致对应的逻辑执行了两次。
解决方法:废除定时任务,使用云控task的ip配置一台机器
下面这个是我百度其他人的,因为我的代码里面也已经写了countDownLatch,所以解决方案不一样。
使用countDownLatch指令枪,将异步执行逻辑阻塞在主线程,等全部执行完了之后,再去释放锁,拉开了执行时间,从而有效避免两个服务都能获取到分布式锁。