ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

周期任务-选举领航者

2022-07-08 17:35:25  阅读:138  来源: 互联网

标签:redisTotalIntervals lastProcess 周期 选举 private static 领航者 lastTotalIntervals


每隔单位时间执行一次任务,多节点需要同步

 1     @Autowired
 2     RedissonClient redissonClient;
 3 
 4     /**
 5      * 时间分片
 6      */
 7     private final static long INTERVAL = 30_000L;
 8     /**
 9      * 对象名
10      */
11     private final static String BUCKET_NAME = "";
12     /**
13      * 上次时间分片数
14      */
15     private static long lastTotalIntervals = 0;
16     /**
17      * 领航者标识
18      */
19     private static boolean lastProcess = false;
20 
21     /**
22      * 判断本次是否执行操作
23      * 每 INTERVAL << 1 重新选举
24      *
25      * @return TRUE | FALSE
26      */
27     private boolean operateOneInterval() {
28         // 领航者优先一个时间分片,最多两次运行机会
29         long currentTotalIntervals =
30                 ((lastProcess ? INTERVAL : 0L) + System.currentTimeMillis())
31                         / (INTERVAL << 1);
32         // 比较本地分片
33         if (currentTotalIntervals > lastTotalIntervals) {
34             RBucket<Long> oneIntervalBucket = redissonClient.getBucket(BUCKET_NAME);
35             // 比较最新分片
36             Long redisTotalIntervals = oneIntervalBucket.get();
37             if (Objects.isNull(redisTotalIntervals)
38                     || currentTotalIntervals > (lastTotalIntervals = redisTotalIntervals)) {
39                 boolean beforeStatue = lastProcess;
40                 // 选举领航者,更新标识
41                 lastProcess = oneIntervalBucket.compareAndSet(redisTotalIntervals, currentTotalIntervals);
42                 System.out.printf("争抢结果:%b, 节点变更:%b", lastProcess, beforeStatue != lastProcess);
43             }
44         }
45         return lastProcess;
46     }

 

标签:redisTotalIntervals,lastProcess,周期,选举,private,static,领航者,lastTotalIntervals
来源: https://www.cnblogs.com/htsg/p/16459061.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有