【◐系统架构】解决集群环境下定时任务多次执行的办法有哪些?
服务器采用了负载均衡,有两台服务器,部署的代码一样,所以里面的定时任务在某一时间会被同时执行,这就导致了很多其他意外的发生,想要解决的问题基本就三个:单点执行,故障转移,服务状态。
默认固定执行定时任务的服务
在某一台服务上面执行定时任务,其他服务关闭定时任务,或者在定时任务前加判断指定ip,缺点指定的服务出现问题则定时任务无法在运行。
利用MySQL共享锁事务管理机制运行任务
创建定时任务表,name为不同定时任务的指定名称,execute为是否执行中:1执行 0未执行。
由于存在表锁和行锁,因此同一时刻只能有一个事务操作,可以保证只执行一次。
此处更新操作只会成功一次,执行完重新设置excute为0;
利用redis
执行定时任务前先查询 redis 是否有改任务的值,没有就自己 执行,并插入新的 key-value。有的话则不执行。
使用分布式任务调度框架
如Quartz、Xxl-job、Elastic-job等等。

浙公网安备 33010602011771号