该系统中使用了很多Timer来定时处理不同的任务,部署的时候为实现系统的稳定性,高可用性,
要求至少双活,或多活...本来基于SpringCloud的分布式能力,或者可以用分布式定时器,Quartz
如果以后再实现定时任务,要记得用这个吧Quartz,可以实现定时任务,关键是,可以实现定时任务
的分布式,保证同时只有一个定时任务在运行,不用自己再实现这个机制了..
但是由于之前设计这个系统的同事用到Timer,所以..现在还能继续做了..先自己实现一套再说.
思路是:
利用redis,存放服务器的IP,并且给IP打上标志位,比如{type:master , ip:10.11.12.13 , state :active ,time:2022-06-11 11:15}
1.对于主服务器:然后,系统启动以后,有定时器去,不停的检测,检测自己的IP和系统时间,跟获取出来的,redis中的,时间,和IP,是否一致,如果IP一致,就说明自己就是主服务器,并且自己的系统时间,减去redis中获取的时间,时间差没有大于超时时间,这个时候就去更新一下redis中的时间.
2.对于从服务器,启动以后也是去检测,不停的获取redis中的,{type:master , ip:10.11.12.13 , state :active ,time:2022-06-11 11:15} 数据,获取以后,用自己的IP跟获取的IP对比,发现自己不是主服务器,
然后就不做任何操作,然后不停的检测,直到检测到,自己的系统时间,和获取的redis的时间差,超过
超时时间,就说明主服务器已经不更新时间了,说明主服务器down机了,这个时候,从服务器,就可以
修改redis中的这个数据:{type:master , ip:10.11.12.13 , state :active ,time:2022-06-11 11:15}
把IP改成自己的,然后开始不停的,更新时间,同时,启动自己的定时服务开始处理数据.
3.而等主服务器恢复服务以后,主服务器会再次检测,但是检测到IP,不是自己的来,说明自己已经变成了