Преглед на файлове

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

xueli.xue преди 8 години
родител
ревизия
7102517093

+ 10 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java Целия файл

16
 public class ExecutorRouteLRU extends ExecutorRouter {
16
 public class ExecutorRouteLRU extends ExecutorRouter {
17
 
17
 
18
     private static ConcurrentHashMap<Integer, LinkedHashMap<String, String>> jobLRUMap = new ConcurrentHashMap<Integer, LinkedHashMap<String, String>>();
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
     @Override
21
     @Override
21
     public String route(int jobId, ArrayList<String> addressList) {
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
         LinkedHashMap<String, String> lruItem = jobLRUMap.get(jobId);
31
         LinkedHashMap<String, String> lruItem = jobLRUMap.get(jobId);
24
         if (lruItem == null) {
32
         if (lruItem == null) {
25
             /**
33
             /**
31
             jobLRUMap.put(jobId, lruItem);
39
             jobLRUMap.put(jobId, lruItem);
32
         }
40
         }
33
 
41
 
42
+        // put
34
         for (String address: addressList) {
43
         for (String address: addressList) {
35
             if (!lruItem.containsKey(address)) {
44
             if (!lruItem.containsKey(address)) {
36
                 lruItem.put(address, address);
45
                 lruItem.put(address, address);
37
             }
46
             }
38
         }
47
         }
39
 
48
 
49
+        // load
40
         String eldestKey = lruItem.entrySet().iterator().next().getKey();
50
         String eldestKey = lruItem.entrySet().iterator().next().getKey();
41
         String eldestValue = lruItem.get(eldestKey);
51
         String eldestValue = lruItem.get(eldestKey);
42
         return eldestValue;
52
         return eldestValue;

+ 11 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java Целия файл

11
 public class ExecutorRouteRound extends ExecutorRouter {
11
 public class ExecutorRouteRound extends ExecutorRouter {
12
 
12
 
13
     private static ConcurrentHashMap<Integer, Integer> routeCountEachJob = new ConcurrentHashMap<Integer, Integer>();
13
     private static ConcurrentHashMap<Integer, Integer> routeCountEachJob = new ConcurrentHashMap<Integer, Integer>();
14
+    private static long CACHE_VALID_TIME = 0;
14
     private static int count(int jobId) {
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
         Integer count = routeCountEachJob.get(jobId);
23
         Integer count = routeCountEachJob.get(jobId);
16
         count = (count==null)?0:++count;
24
         count = (count==null)?0:++count;
17
         routeCountEachJob.put(jobId, count);
25
         routeCountEachJob.put(jobId, count);
20
 
28
 
21
     @Override
29
     @Override
22
     public String route(int jobId, ArrayList<String> addressList) {
30
     public String route(int jobId, ArrayList<String> addressList) {
31
+
32
+
33
+
23
         return addressList.get(count(jobId)%addressList.size());
34
         return addressList.get(count(jobId)%addressList.size());
24
     }
35
     }
25
 
36