ソースを参照

执行器"轮训"和"LRU"策略中新增缓存Clear逻辑;

xueli.xue 8 年 前
コミット
7102517093

+ 10 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java ファイルの表示

@@ -16,10 +16,18 @@ import java.util.concurrent.ConcurrentHashMap;
16 16
 public class ExecutorRouteLRU extends ExecutorRouter {
17 17
 
18 18
     private static ConcurrentHashMap<Integer, LinkedHashMap<String, String>> jobLRUMap = new ConcurrentHashMap<Integer, LinkedHashMap<String, String>>();
19
+    private static long CACHE_VALID_TIME = 0;
19 20
 
20 21
     @Override
21 22
     public String route(int jobId, ArrayList<String> addressList) {
22 23
 
24
+        // cache clear
25
+        if (System.currentTimeMillis() > CACHE_VALID_TIME) {
26
+            jobLRUMap.clear();
27
+            CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
28
+        }
29
+
30
+        // init lru
23 31
         LinkedHashMap<String, String> lruItem = jobLRUMap.get(jobId);
24 32
         if (lruItem == null) {
25 33
             /**
@@ -31,12 +39,14 @@ public class ExecutorRouteLRU extends ExecutorRouter {
31 39
             jobLRUMap.put(jobId, lruItem);
32 40
         }
33 41
 
42
+        // put
34 43
         for (String address: addressList) {
35 44
             if (!lruItem.containsKey(address)) {
36 45
                 lruItem.put(address, address);
37 46
             }
38 47
         }
39 48
 
49
+        // load
40 50
         String eldestKey = lruItem.entrySet().iterator().next().getKey();
41 51
         String eldestValue = lruItem.get(eldestKey);
42 52
         return eldestValue;

+ 11 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java ファイルの表示

@@ -11,7 +11,15 @@ import java.util.concurrent.ConcurrentHashMap;
11 11
 public class ExecutorRouteRound extends ExecutorRouter {
12 12
 
13 13
     private static ConcurrentHashMap<Integer, Integer> routeCountEachJob = new ConcurrentHashMap<Integer, Integer>();
14
+    private static long CACHE_VALID_TIME = 0;
14 15
     private static int count(int jobId) {
16
+        // cache clear
17
+        if (System.currentTimeMillis() > CACHE_VALID_TIME) {
18
+            routeCountEachJob.clear();
19
+            CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
20
+        }
21
+
22
+        // count++
15 23
         Integer count = routeCountEachJob.get(jobId);
16 24
         count = (count==null)?0:++count;
17 25
         routeCountEachJob.put(jobId, count);
@@ -20,6 +28,9 @@ public class ExecutorRouteRound extends ExecutorRouter {
20 28
 
21 29
     @Override
22 30
     public String route(int jobId, ArrayList<String> addressList) {
31
+
32
+
33
+
23 34
         return addressList.get(count(jobId)%addressList.size());
24 35
     }
25 36