码迷,mamicode.com
首页 > 其他好文 > 详细

集群服务器定时任务,只运行一个定时器的设计

时间:2020-02-19 05:46:06      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:部署   rip   serve   自己   超过   用法   解决   update   服务   

(1)只在一台服务器上部署该定时任务代码。

(2)在定时任务代码上加上某个特定的ip限制,仅某个ip的服务器能运行该定时任务。

(3)利用数据库的共享锁事务管理机制来运行定时任务。

   第一步:新建一张数据库表,表有三个字段:status(表当前定时器是否处于可运行状态)、timestamp(时间戳)、serverIP(正在运行定时器的服务器IP)。

   第二步:检查是否有机器正在运行定时任务。检查方法:update定时任务表的status字段为1(1为执行中,0为未执行)、ip为自己的ip,如果update失败,则证明有机器在执行该定时任务,该机器的定时任务就不执行了,成功则进行第三步。

   第三步:执行定时任务的具体内容,结束还原excute字段为0。

另外:
  首先,我们先在数据库建一个表:timerT,表里面有三个字段:status(表当前定时器是否处于可运行状态)、timestamp(时间戳)、serverIP(正在运行定时器的服务器IP)。
      这里其具体的用法是:当两台服务器,都运行起来后,服务器A开始执行定时器,这时,A会去读取表timerT的status字段,当为0时,则执行定时器的业务逻辑,此时A定时器,需要把status改为1,以便让另一台服务器的定时器B不去执行业务逻辑并把当前服务器的IP记录到表中,同时修改启动一个新的线程,在XXX长的时间间隔内不断去修改timestamp的值,当A执行完业务逻辑时,就把status的值改为0,这样B定时器就可以执行。
  这样做可以解决一个问题,就是:当其中一个定时器A挂掉后,我们另一个定时器B,可以比对timestap的值与当前时间是否超过XXX时长,如果超过,则证明定时器A已经挂掉,这时B就会把status的值改成1,把serverIP改成B定时器所在的服务器IP,并执行业务逻辑。

集群服务器定时任务,只运行一个定时器的设计

标签:部署   rip   serve   自己   超过   用法   解决   update   服务   

原文地址:https://www.cnblogs.com/lgg20/p/12329568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!