最近在业务中接入了一个第三方的接口,第三方为了提高服务的可用性提供了多个地址供外部服务调用,所以需要实现在请求某一个地址不可用时自动切换到另一个地址并重试的功能。由于业务中使用 OkHttp,所以直接用 OkHttp 的自定义拦截器实现。
1.在 application.properties 中配置外部服务地址,多个地址用英文半角逗号隔开
xxx.api.addr=http://www.baidu.com,http://www.google.com
2.自定义 Intercept
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.List;
/**
* okHttp拦截器,主要用于拦截失败请求并重试
* @author hellohuan
* @date 2020/1/11 9:38
*/
public class RetryAndChangeUrlInterceptor implements Interceptor {
private static final Logger LOG = LoggerFactory.getLogger(RetryAndChangeUrlInterceptor.class);
/**
* 默认重试3次
*/
private int retryCount;
/**
* 默认url
*/
private String firstAddr;
/**
* url地址池