使用okhttp发起请求,请求对方接口偶尔会出现异常, java.net.SocketTimeoutException: Read timed out

有时候网络不太稳定或者返回的报文比较长就会出现这种情况。

两种解决方式。

一种增大超时时间,

一种使用重试机制。

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.6.0</version>
        </dependency>

1、

OkHttpClient.Builder okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(1, TimeUnit.MINUTES)
                .readTimeout(1, TimeUnit.MINUTES)
                .writeTimeout(1, TimeUnit.MINUTES);

2、

 OkHttpClient.Builder okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new MyInterceptor());
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;


public class MyInterceptor implements Interceptor {
    // 最大重试次数
    private int maxRetryTimes = 5;

    @Override
    public Response intercept(Chain chain) throws IOException {
        return retry(chain, 0);
    }

    private Response retry(Chain chain, int count) {
        Response response = null;
        try {
            System.out.println("第" + (count + 1) + "次进入retry方法。");
            response = chain.proceed(chain.request());
        } catch (Exception e) {
            if (maxRetryTimes > count) {
                response = retry(chain, count + 1);
            }
        } finally {
            return response;
        }
    }
}
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐