为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃尔雅 2019-03-29 23:15:26
目前想到的方法是,数据库记录请求的信息(包含请求地址,和错误次数,是否成功),然后用quartz每隔30秒筛选一次数据库没有成功的回调,执行回调。但是我感觉一直跑着定时任务会不会很浪费。想知道有没有更好的解决方案。
查看完整描述

8 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-04-16
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-04-16
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-04-16
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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


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


查看完整回答
反对 回复 2019-04-16
?
12345678_0001

TA贡献1802条经验 获得超5个赞

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


查看完整回答
反对 回复 2019-04-16
?
狐的传说

TA贡献1804条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-04-16
?
MM们

TA贡献1886条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-04-16
  • 8 回答
  • 0 关注
  • 1152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信