|
@@ -3,8 +3,10 @@ package com.xxl.job.admin.core.jobbean;
|
3
|
3
|
import com.xxl.job.admin.core.callback.XxlJobLogCallbackServer;
|
4
|
4
|
import com.xxl.job.admin.core.model.XxlJobInfo;
|
5
|
5
|
import com.xxl.job.admin.core.model.XxlJobLog;
|
|
6
|
+import com.xxl.job.admin.core.model.XxlJobRegistry;
|
6
|
7
|
import com.xxl.job.admin.core.thread.JobMonitorHelper;
|
7
|
8
|
import com.xxl.job.admin.core.util.DynamicSchedulerUtil;
|
|
9
|
+import com.xxl.job.core.registry.RegistHelper;
|
8
|
10
|
import com.xxl.job.core.router.HandlerRouter.ActionRepository;
|
9
|
11
|
import com.xxl.job.core.router.model.RequestModel;
|
10
|
12
|
import com.xxl.job.core.router.model.ResponseModel;
|
|
@@ -18,10 +20,7 @@ import org.slf4j.LoggerFactory;
|
18
|
20
|
import org.springframework.scheduling.quartz.QuartzJobBean;
|
19
|
21
|
|
20
|
22
|
import java.text.MessageFormat;
|
21
|
|
-import java.util.Arrays;
|
22
|
|
-import java.util.Collections;
|
23
|
|
-import java.util.Date;
|
24
|
|
-import java.util.List;
|
|
23
|
+import java.util.*;
|
25
|
24
|
|
26
|
25
|
/**
|
27
|
26
|
* http job bean
|
|
@@ -57,8 +56,25 @@ public class RemoteHttpJobBean extends QuartzJobBean {
|
57
|
56
|
requestModel.setLogAddress(XxlJobLogCallbackServer.getTrigger_log_address());
|
58
|
57
|
requestModel.setLogId(jobLog.getId());
|
59
|
58
|
|
|
59
|
+ // parse address
|
|
60
|
+ List<String> addressList = new ArrayList<String>();
|
|
61
|
+ String parseAddressMsg = null;
|
|
62
|
+ if (StringUtils.isNotBlank(jobInfo.getExecutorAppname())) {
|
|
63
|
+ List<XxlJobRegistry> xxlJobRegistryList = DynamicSchedulerUtil.xxlJobRegistryDao.findRegistrys(RegistHelper.RegistType.EXECUTOR.name(), jobInfo.getExecutorAppname());
|
|
64
|
+ if (xxlJobRegistryList!=null && xxlJobRegistryList.size()>0) {
|
|
65
|
+ for (XxlJobRegistry item: xxlJobRegistryList) {
|
|
66
|
+ addressList.add(item.getRegistryValue());
|
|
67
|
+ }
|
|
68
|
+ }
|
|
69
|
+ parseAddressMsg = MessageFormat.format("Parse Address (Appname注册方式) <br>>>>[address list] : {0}<br><hr>", addressList.toArray());
|
|
70
|
+ } else {
|
|
71
|
+ List<String> addressArr = Arrays.asList(jobInfo.getExecutorAddress().split(","));
|
|
72
|
+ addressList.addAll(addressArr);
|
|
73
|
+ parseAddressMsg = MessageFormat.format("Parse Address (地址配置方式) <br>>>>[address list] : {0}<br><hr>", addressList.toArray());
|
|
74
|
+ }
|
|
75
|
+
|
60
|
76
|
// failover trigger
|
61
|
|
- ResponseModel responseModel = failoverTrigger(jobInfo.getExecutorAddress(), requestModel, jobLog);
|
|
77
|
+ ResponseModel responseModel = failoverTrigger(addressList, requestModel, jobLog);
|
62
|
78
|
jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
|
63
|
79
|
jobLog.setExecutorParam(jobInfo.getExecutorParam());
|
64
|
80
|
logger.info(">>>>>>>>>>> xxl-job failoverTrigger response, jobId:{}, responseModel:{}", jobLog.getId(), responseModel.toString());
|
|
@@ -66,7 +82,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
|
66
|
82
|
// update trigger info
|
67
|
83
|
jobLog.setTriggerTime(new Date());
|
68
|
84
|
jobLog.setTriggerStatus(responseModel.getStatus());
|
69
|
|
- jobLog.setTriggerMsg(responseModel.getMsg());
|
|
85
|
+ jobLog.setTriggerMsg(parseAddressMsg + responseModel.getMsg());
|
70
|
86
|
DynamicSchedulerUtil.xxlJobLogDao.updateTriggerInfo(jobLog);
|
71
|
87
|
|
72
|
88
|
// monitor triger
|
|
@@ -78,16 +94,14 @@ public class RemoteHttpJobBean extends QuartzJobBean {
|
78
|
94
|
|
79
|
95
|
/**
|
80
|
96
|
* failover for trigger remote address
|
81
|
|
- * @param handler_address
|
82
|
97
|
* @return
|
83
|
98
|
*/
|
84
|
|
- public ResponseModel failoverTrigger(String handler_address, RequestModel requestModel, XxlJobLog jobLog){
|
85
|
|
- if (handler_address.split(",").length > 1) {
|
|
99
|
+ public ResponseModel failoverTrigger(List<String> addressList, RequestModel requestModel, XxlJobLog jobLog){
|
|
100
|
+ if (addressList.size() > 1) {
|
86
|
101
|
|
87
|
102
|
// for ha
|
88
|
|
- List<String> addressList = Arrays.asList(handler_address.split(","));
|
89
|
103
|
Collections.shuffle(addressList);
|
90
|
|
-
|
|
104
|
+
|
91
|
105
|
// for failover
|
92
|
106
|
String failoverMessage = "";
|
93
|
107
|
for (String address : addressList) {
|
|
@@ -119,14 +133,20 @@ public class RemoteHttpJobBean extends QuartzJobBean {
|
119
|
133
|
result.setStatus(ResponseModel.FAIL);
|
120
|
134
|
result.setMsg(failoverMessage);
|
121
|
135
|
return result;
|
122
|
|
- } else {
|
|
136
|
+ } else if (addressList.size() == 1) {
|
|
137
|
+ String address = addressList.get(0);
|
123
|
138
|
// store real address
|
124
|
|
- jobLog.setExecutorAddress(handler_address);
|
|
139
|
+ jobLog.setExecutorAddress(address);
|
125
|
140
|
|
126
|
|
- ResponseModel triggerCallback = XxlJobNetCommUtil.postHex(XxlJobNetCommUtil.addressToUrl(handler_address), requestModel);
|
127
|
|
- String failoverMessage = MessageFormat.format("Trigger running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>", handler_address, triggerCallback.getStatus(), triggerCallback.getMsg());
|
|
141
|
+ ResponseModel triggerCallback = XxlJobNetCommUtil.postHex(XxlJobNetCommUtil.addressToUrl(address), requestModel);
|
|
142
|
+ String failoverMessage = MessageFormat.format("Trigger running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>", address, triggerCallback.getStatus(), triggerCallback.getMsg());
|
128
|
143
|
triggerCallback.setMsg(failoverMessage);
|
129
|
144
|
return triggerCallback;
|
|
145
|
+ } else {
|
|
146
|
+ ResponseModel result = new ResponseModel();
|
|
147
|
+ result.setStatus(ResponseModel.FAIL);
|
|
148
|
+ result.setMsg( "Trigger error, <br>>>>address list is null <br><hr>" );
|
|
149
|
+ return result;
|
130
|
150
|
}
|
131
|
151
|
}
|
132
|
152
|
|