Skip to content

自定义重试策略

echisan edited this page Apr 20, 2019 · 1 revision

这里提供一个例子

充实策略可以配合UploadInterceptor以及RetryableUploadRequest共同定义重试策略

定义RetryableUploadRequest

需要重写shouldRetry方法,也是一个模版方法模式,底层根据该返回结果判断是否重试。

重试策略

public class MyRetryUploadRequest extends RetryableUploadRequest {

    @Override
    public boolean shouldRetry(UploadResponse uploadResponse) {

        // 根据响应的结果进行判断重试策略
        // 而该响应结果可以添加自定义的拦截器配合
        if (uploadResponse.getMessage().startsWith("flag")){
            // 可以判断你自己自定义的code
            String code = uploadResponse.getMessage().replace("flag:", "");
            if (code.equals("123")){
                return true;
            }
        }
        return false;
    }
}

跟重试策略配合的拦截器

public class MyRetryInterceptor implements UploadInterceptor{
    // 确保线程安全
    private AtomicInteger count = new AtomicInteger(0);

    @Override
    public boolean processBefore(UploadAttributes uploadAttributes) {
        // 可以根据添加自己的处理
        if (count.get()>10){
            // 如果已经大于10次就不再进行上传操作了
            return false;
        }
        return true;
    }

    @Override
    public void processAfter(UploadResponse uploadResponse) {
        // 由于(设计缺陷)这里没有提供一个存放自定义信息的容器
        // 只能放在这里了,可能后续会添加
        uploadResponse.setMessage("flag:123");
        count.incrementAndGet();
    }
}