请求重试

Posted guagua-join-1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求重试相关的知识,希望对你有一定的参考价值。

该代码就是普通的尝试五次请求,并没有对请求的时间间隔进行限制

在逻辑代码里可以加入请求时间的间隔。

package com.qdsg.ylt_vedio.common.untils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.retry.RecoveryCallback;
import org.springframework.retry.RetryCallback;
import org.springframework.retry.RetryContext;
import org.springframework.retry.policy.SimpleRetryPolicy;
import org.springframework.retry.support.RetryTemplate;

/**
* @Description
* @ClassName ReTryUtil
* @Authetr CZQ
* @Date 2018/9/20 8:38
* @VERSION 1.0
**/
public class ReTryUtil {
private static final Logger logger = LoggerFactory.getLogger(ReTryUtil.class);

public static Object doIs(String uri, Object user, Object param) {

// 重试机制
RetryTemplate oRetryTemplate = new RetryTemplate();
SimpleRetryPolicy oRetryPolicy = new SimpleRetryPolicy();
oRetryPolicy.setMaxAttempts(5);// 重试5次
oRetryTemplate.setRetryPolicy(oRetryPolicy);
Object obj = null;
try {
// obj为doWithRetry的返回结果,可以为任意类型
obj = oRetryTemplate.execute(new RetryCallback<Object, Exception>() {
@Override
public Object doWithRetry(RetryContext context) throws Exception {// 开始重试
String redo = Redo(uri, user, param);
return redo;//这里是我们处理的逻辑
}
}, new RecoveryCallback<Object>() {
@Override
public Object recover(RetryContext context) throws Exception { // 重试多次后都失败了
return "系统异常,不能结束会议";
}
});
} catch (Exception e) {
logger.error("重试结束会议异常 {}", e.getMessage());
}
return obj;
}

private static String Redo(String uri, Object user, Object param) {
String str = HttpClientUtil.httpPostRequest(uri, user, param);
JSONObject jsonObject = JSON.parseObject(str);
String code = jsonObject.get("code").toString();
if (code.equals("200")) {
return str;
} else {
logger.info("重试5次,仍然没有结束掉会议");
throw new RuntimeException();
}
}
}




















































以上是关于请求重试的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们在重试请求之间应用延迟

利用feign的重试机制刷新过期的请求Token

重试 HttpClient 不成功的请求

修改有效载荷的 Alamofire 重试请求

Restkit:重试失败的请求

如何使用 OkHttp/Retrofit 重试 HTTP 请求?