【问题标题】:Retry strategy/framework for doing retry on result for failed insertions重试失败插入结果的重试策略/框架
【发布时间】:2021-01-08 14:02:46
【问题描述】:

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

有没有我可以在 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.
}

【问题讨论】:

    标签: java retry-logic


    【解决方案1】:

    我不知道,一个框架似乎有点矫枉过正,但也许我误解了你的问题。

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

    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
    }
    

    【讨论】:

    • 当然这是传统方式。但是,我想在重试失败的 DSN 之前使用等待时间的指数重试策略。像 FailSafe 这样的框架可以在这里提供帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多