请求重试

本文详细介绍了如何在Spring中使用重试机制,通过一个具体的示例代码,展示了如何设置重试次数,处理重试逻辑以及在重试失败后的恢复策略。代码中使用了RetryTemplate和SimpleRetryPolicy来实现五次重试请求的逻辑。
摘要由CSDN通过智能技术生成

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

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

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();
}
}
}

转载于:https://www.cnblogs.com/guagua-join-1/p/9680195.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值