请求一个地址,如果失败,则隔30秒请求一次,直到失败10次,就不调用了,如何实现?

发布于 2022-09-01 23:37:21 字数 124 浏览 10 评论 0

目前想到的方法是,数据库记录请求的信息(包含请求地址,和错误次数,是否成功),然后用quartz每隔30秒筛选一次数据库没有成功的回调,执行回调。但是我感觉一直跑着定时任务会不会很浪费。

想知道有没有更好的解决方案。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

2022-09-08 23:37:21

这个请求失败你要判断url http code

少女的英雄梦 2022-09-08 23:37:21

这样就可以了 我是想不出什么比这个更好的办法了

若相惜即相离 2022-09-08 23:37:21

其实题目已经抽象的说明了实现。
问题是这个需求是解决什么问题的?

南巷近海 2022-09-08 23:37:21

每一次请求的时候循环10次,成功则break出去不就行了,用得着数据库吗?
如何判断失败:
设定超时时间为30s,30s未响应为一种失败,其他的根据返回的httpCode以及返回的数据内容自行判断即可
如何定时30s请求一次:
记录每次请求开始时的时间,当判断失败之后,校验下当前时间与请求开始时间是否隔了30s,已经达到30s则直接进行循环请求,否则使用Thread.sleep(30-间隔)将线程睡眠,起来之后继续请求。


如果你想批量操作的话,Quartz是可以的,不想用Quartz的话用ScheduledThreadPoolExecutor也是可以的,不推荐用Timer
如果想降低复杂度的话,可以采用这种针对单次任务进行重试的方式。

顾忌 2022-09-08 23:37:21

也可以放在前端实现,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
        }
    }
});
淡淡離愁欲言轉身 2022-09-08 23:37:21

java也有自己的定时器啊,用定时器试试

℡寂寞咖啡 2022-09-08 23:37:21

想知道业务场景什么样的,我如果做用循环10次,判断成功后break

风为裳 2022-09-08 23:37:21

我也有此想法 ,我的想法是当请求一个接口之后看接口返回做一个判断返回值正常继续下一步如果返回异常或错误就抛出打印,隔一定时间间隔后再次请求次接口循环几次都可以

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文