使用IExecutorService进行异步重试

时间:2017-04-12 16:19:24

标签: java asynchronous hazelcast

我正试图找出一种方法,使用 Hazelcast IExecutorService实现异步重试机制,而无需递归调用:

递归解决方案如下:

Callable task = ...

private sendToExecutor(){ 

  Future future = submitToExecutorService(task);

  ((ICompletableFuture<ActionReply>) future).andThen(callback);
}

回调是ExecutionCallback:

@Override
public void onResponse(ActionReply response) {
     // normal stuff
}

@Override
public void onFailure(Throwable t) {

    // re-send if possible
    if(numRetries < max_retries){ 
        sendToExecutor();
    }
}

我很难找到一个不涉及递归的好解决方案。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

创建一个实现Future的包装器类,并实现应该捕获get的{​​{1}}方法。请注意,您需要限制重试次数。如果超过该限制意味着您的群集存在一些主要问题。

RetryableHazelcastException