目前想到的方法是,数据库记录请求的信息(包含请求地址,和错误次数,是否成功),然后用quartz每隔30秒筛选一次数据库没有成功的回调,执行回调。但是我感觉一直跑着定时任务会不会很浪费。
想知道有没有更好的解决方案。
目前想到的方法是,数据库记录请求的信息(包含请求地址,和错误次数,是否成功),然后用quartz每隔30秒筛选一次数据库没有成功的回调,执行回调。但是我感觉一直跑着定时任务会不会很浪费。
想知道有没有更好的解决方案。
每一次请求的时候循环10次,成功则break出去不就行了,用得着数据库吗?
如何判断失败:
设定超时时间为30s,30s未响应为一种失败,其他的根据返回的httpCode以及返回的数据内容自行判断即可
如何定时30s请求一次:
记录每次请求开始时的时间,当判断失败之后,校验下当前时间与请求开始时间是否隔了30s,已经达到30s则直接进行循环请求,否则使用Thread.sleep(30-间隔)将线程睡眠,起来之后继续请求。
如果你想批量操作的话,Quartz是可以的,不想用Quartz的话用ScheduledThreadPoolExecutor也是可以的,不推荐用Timer
如果想降低复杂度的话,可以采用这种针对单次任务进行重试的方式。
也可以放在前端实现,JQuery 的 AJAX 异步请求
$.ajax({
url : 'someurl',
type : 'POST',
data : ....,
tryCount : 0,
retryLimit : 3, <!-- 此处就是你失败后尝试再次访问请求的次数-->
success : function(json) {
//do something
},
error : function(xhr, textStatus, errorThrown ) {
if (textStatus == 'timeout') {
this.tryCount++;
if (this.tryCount <= this.retryLimit) {
//try again
$.ajax(this);
return;
}
return;
}
if (xhr.status == 500) {
//handle error
} else {
//handle error
}
}
});
4 回答1.2k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答704 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.6k 阅读
2 回答1.3k 阅读
这个请求失败你要判断url http code