|
@@ -8,7 +8,6 @@ import com.xxl.job.core.executor.XxlJobExecutor;
|
8
|
8
|
import com.xxl.job.core.log.XxlJobFileAppender;
|
9
|
9
|
import com.xxl.job.core.log.XxlJobLogger;
|
10
|
10
|
import com.xxl.job.core.util.FileUtil;
|
11
|
|
-import com.xxl.job.core.util.JacksonUtil;
|
12
|
11
|
import org.slf4j.Logger;
|
13
|
12
|
import org.slf4j.LoggerFactory;
|
14
|
13
|
|
|
@@ -190,46 +189,53 @@ public class TriggerCallbackThread {
|
190
|
189
|
|
191
|
190
|
// ---------------------- fail-callback file ----------------------
|
192
|
191
|
|
193
|
|
- private static String failCallbackFileName = XxlJobFileAppender.getLogPath().concat(File.separator).concat("xxl-job-callback").concat(".log");
|
|
192
|
+ private static String failCallbackFilePath = XxlJobFileAppender.getLogPath().concat(File.separator);
|
|
193
|
+ private static String failCallbackFileName = failCallbackFilePath.concat("xxl-job-callback-{x}").concat(".log");
|
194
|
194
|
|
195
|
195
|
private void appendFailCallbackFile(List<HandleCallbackParam> callbackParamList){
|
|
196
|
+ // valid
|
|
197
|
+ if (callbackParamList==null || callbackParamList.size()==0) {
|
|
198
|
+ return;
|
|
199
|
+ }
|
|
200
|
+
|
196
|
201
|
// append file
|
197
|
|
- String content = JacksonUtil.writeValueAsString(callbackParamList);
|
198
|
|
- FileUtil.appendFileLine(failCallbackFileName, content);
|
|
202
|
+ byte[] callbackParamList_bytes = XxlJobExecutor.getSerializer().serialize(callbackParamList);
|
|
203
|
+
|
|
204
|
+ File callbackLogFile = new File(failCallbackFileName.replace("{x}", String.valueOf(System.currentTimeMillis())));
|
|
205
|
+ if (callbackLogFile.exists()) {
|
|
206
|
+ for (int i = 0; i < 100; i++) {
|
|
207
|
+ callbackLogFile = new File(failCallbackFileName.replace("{x}", String.valueOf(System.currentTimeMillis()).concat("-").concat(String.valueOf(i)) ));
|
|
208
|
+ if (!callbackLogFile.exists()) {
|
|
209
|
+ break;
|
|
210
|
+ }
|
|
211
|
+ }
|
|
212
|
+ }
|
|
213
|
+ FileUtil.writeFileContent(callbackLogFile, callbackParamList_bytes);
|
199
|
214
|
}
|
200
|
215
|
|
201
|
216
|
private void retryFailCallbackFile(){
|
202
|
217
|
|
203
|
|
- // load and clear file
|
204
|
|
- List<String> fileLines = FileUtil.loadFileLines(failCallbackFileName);
|
205
|
|
- FileUtil.deleteFile(failCallbackFileName);
|
206
|
|
-
|
207
|
|
- // parse
|
208
|
|
- List<HandleCallbackParam> failCallbackParamList = new ArrayList<>();
|
209
|
|
- if (fileLines!=null && fileLines.size()>0) {
|
210
|
|
- for (String line: fileLines) {
|
211
|
|
- List<HandleCallbackParam> failCallbackParamListTmp = JacksonUtil.readValue(line, List.class, HandleCallbackParam.class);
|
212
|
|
- if (failCallbackParamListTmp!=null && failCallbackParamListTmp.size()>0) {
|
213
|
|
- failCallbackParamList.addAll(failCallbackParamListTmp);
|
214
|
|
- }
|
215
|
|
- }
|
|
218
|
+ // valid
|
|
219
|
+ File callbackLogPath = new File(failCallbackFilePath);
|
|
220
|
+ if (!callbackLogPath.exists()) {
|
|
221
|
+ return;
|
|
222
|
+ }
|
|
223
|
+ if (callbackLogPath.isFile()) {
|
|
224
|
+ callbackLogPath.delete();
|
|
225
|
+ }
|
|
226
|
+ if (!(callbackLogPath.isDirectory() && callbackLogPath.list()!=null && callbackLogPath.list().length>0)) {
|
|
227
|
+ return;
|
216
|
228
|
}
|
217
|
229
|
|
218
|
|
- // retry callback, 100 lines per page
|
219
|
|
- if (failCallbackParamList!=null && failCallbackParamList.size()>0) {
|
220
|
|
- int pagesize = 100;
|
221
|
|
- List<HandleCallbackParam> pageData = new ArrayList<>();
|
222
|
|
- for (int i = 0; i < failCallbackParamList.size(); i++) {
|
223
|
|
- pageData.add(failCallbackParamList.get(i));
|
224
|
|
- if (i>0 && i%pagesize == 0) {
|
225
|
|
- doCallback(pageData);
|
226
|
|
- pageData.clear();
|
227
|
|
- }
|
228
|
|
- }
|
229
|
|
- if (pageData.size() > 0) {
|
230
|
|
- doCallback(pageData);
|
231
|
|
- }
|
|
230
|
+ // load and clear file, retry
|
|
231
|
+ for (File callbaclLogFile: callbackLogPath.listFiles()) {
|
|
232
|
+ byte[] callbackParamList_bytes = FileUtil.readFileContent(callbaclLogFile);
|
|
233
|
+ List<HandleCallbackParam> callbackParamList = (List<HandleCallbackParam>) XxlJobExecutor.getSerializer().deserialize(callbackParamList_bytes, HandleCallbackParam.class);
|
|
234
|
+
|
|
235
|
+ callbaclLogFile.delete();
|
|
236
|
+ doCallback(callbackParamList);
|
232
|
237
|
}
|
|
238
|
+
|
233
|
239
|
}
|
234
|
240
|
|
235
|
241
|
}
|