对插入失败的结果进行重试的重试策略/框架

问题描述

我正在使用一些输入对象对数据库进行服务调用。很少有对象会成功,而其余的会因某种原因而失败。我想要一个指数重试策略来触发对失败对象的相同调用

是否有任何框架可以与 java 中定义的重试策略一起使用

示例调用

Output output = mDbService.persist(List<Objects> objects)

服务调用输出看起来像

class Output {
    int successCount;
    List<FailedObject> FailedObject;
}

// Each FailedObject has a structure

class FailedObject {
   Object object;
   int errorCode; // Some are retryable and other are not.
}

解决方法

我不知道,框架似乎有点过分,但也许我误解了您的问题。

这样的事情会做你想做的吗?

Output output = mDbService.persist(objects);
while(output.failedObject.size() > 0){
    List<Object> retryList = new ArrayList<>();
    for(FailedObject failed:output.failedObject){
        if(shouldRetry(failed.errorCode)){
            retryList.add(failed.object);
        }
    }
    output = mDbService.persist(retryList);
}

您自然还必须提供一个实现来检查错误代码并执行逻辑以确定是否应重试关联的对象。

private boolean shouldRetry(int errorCode){
    // your logic here
}