|
@@ -1,14 +1,17 @@
|
1
|
1
|
package com.xxl.job.admin.core.thread;
|
2
|
2
|
|
|
3
|
+import com.xxl.job.admin.core.model.XxlJobGroup;
|
3
|
4
|
import com.xxl.job.admin.core.model.XxlJobRegistry;
|
4
|
5
|
import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
|
5
|
6
|
import com.xxl.job.core.enums.RegistryConfig;
|
|
7
|
+import org.apache.commons.collections.CollectionUtils;
|
|
8
|
+import org.apache.commons.lang.StringUtils;
|
6
|
9
|
import org.slf4j.Logger;
|
7
|
10
|
import org.slf4j.LoggerFactory;
|
8
|
11
|
|
9
|
12
|
import java.util.ArrayList;
|
|
13
|
+import java.util.HashMap;
|
10
|
14
|
import java.util.List;
|
11
|
|
-import java.util.concurrent.ConcurrentHashMap;
|
12
|
15
|
import java.util.concurrent.TimeUnit;
|
13
|
16
|
|
14
|
17
|
/**
|
|
@@ -23,8 +26,6 @@ public class JobRegistryMonitorHelper {
|
23
|
26
|
return instance;
|
24
|
27
|
}
|
25
|
28
|
|
26
|
|
- private ConcurrentHashMap<String, List<String>> registMap = new ConcurrentHashMap<String, List<String>>();
|
27
|
|
-
|
28
|
29
|
private Thread registryThread;
|
29
|
30
|
private boolean toStop = false;
|
30
|
31
|
public void start(){
|
|
@@ -33,26 +34,42 @@ public class JobRegistryMonitorHelper {
|
33
|
34
|
public void run() {
|
34
|
35
|
while (!toStop) {
|
35
|
36
|
try {
|
36
|
|
- // remove dead admin/executor
|
37
|
|
- XxlJobDynamicScheduler.xxlJobRegistryDao.removeDead(RegistryConfig.DEAD_TIMEOUT);
|
|
37
|
+ // auto registry group
|
|
38
|
+ List<XxlJobGroup> groupList = XxlJobDynamicScheduler.xxlJobGroupDao.findByAddressType(0);
|
|
39
|
+ if (CollectionUtils.isNotEmpty(groupList)) {
|
38
|
40
|
|
39
|
|
- // fresh registry map
|
40
|
|
- ConcurrentHashMap<String, List<String>> temp = new ConcurrentHashMap<String, List<String>>();
|
41
|
|
- List<XxlJobRegistry> list = XxlJobDynamicScheduler.xxlJobRegistryDao.findAll(RegistryConfig.DEAD_TIMEOUT);
|
42
|
|
- if (list != null) {
|
43
|
|
- for (XxlJobRegistry item: list) {
|
44
|
|
- String groupKey = makeGroupKey(item.getRegistryGroup(), item.getRegistryKey());
|
45
|
|
- List<String> registryList = temp.get(groupKey);
|
46
|
|
- if (registryList == null) {
|
47
|
|
- registryList = new ArrayList<String>();
|
48
|
|
- }
|
49
|
|
- if (!registryList.contains(item.getRegistryValue())) {
|
50
|
|
- registryList.add(item.getRegistryValue());
|
|
41
|
+ // remove dead address (admin/executor)
|
|
42
|
+ XxlJobDynamicScheduler.xxlJobRegistryDao.removeDead(RegistryConfig.DEAD_TIMEOUT);
|
|
43
|
+
|
|
44
|
+ // fresh online address (admin/executor)
|
|
45
|
+ HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
|
|
46
|
+ List<XxlJobRegistry> list = XxlJobDynamicScheduler.xxlJobRegistryDao.findAll(RegistryConfig.DEAD_TIMEOUT);
|
|
47
|
+ if (list != null) {
|
|
48
|
+ for (XxlJobRegistry item: list) {
|
|
49
|
+ if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {
|
|
50
|
+ String appName = item.getRegistryKey();
|
|
51
|
+ List<String> registryList = appAddressMap.get(appName);
|
|
52
|
+ if (registryList == null) {
|
|
53
|
+ registryList = new ArrayList<String>();
|
|
54
|
+ }
|
|
55
|
+
|
|
56
|
+ if (!registryList.contains(item.getRegistryValue())) {
|
|
57
|
+ registryList.add(item.getRegistryValue());
|
|
58
|
+ }
|
|
59
|
+ appAddressMap.put(appName, registryList);
|
|
60
|
+ }
|
51
|
61
|
}
|
52
|
|
- temp.put(groupKey, registryList);
|
|
62
|
+ }
|
|
63
|
+
|
|
64
|
+ // fresh group address
|
|
65
|
+ for (XxlJobGroup group: groupList) {
|
|
66
|
+ List<String> registryList = appAddressMap.get(group.getAppName());
|
|
67
|
+ String addressListStr = StringUtils.join(registryList, ",");
|
|
68
|
+
|
|
69
|
+ group.setAddressList(addressListStr);
|
|
70
|
+ XxlJobDynamicScheduler.xxlJobGroupDao.update(group);
|
53
|
71
|
}
|
54
|
72
|
}
|
55
|
|
- registMap = temp;
|
56
|
73
|
} catch (Exception e) {
|
57
|
74
|
logger.error("job registry instance error:{}", e);
|
58
|
75
|
}
|
|
@@ -73,13 +90,4 @@ public class JobRegistryMonitorHelper {
|
73
|
90
|
//registryThread.interrupt();
|
74
|
91
|
}
|
75
|
92
|
|
76
|
|
- private static String makeGroupKey(String registryGroup, String registryKey){
|
77
|
|
- return registryGroup.concat("_").concat(registryKey);
|
78
|
|
- }
|
79
|
|
-
|
80
|
|
- public static List<String> discover(String registryGroup, String registryKey){
|
81
|
|
- String groupKey = makeGroupKey(registryGroup, registryKey);
|
82
|
|
- return instance.registMap.get(groupKey);
|
83
|
|
- }
|
84
|
|
-
|
85
|
93
|
}
|