RetryStrategy в CXF делает больше попыток, чем настроено - PullRequest
0 голосов
/ 27 марта 2020

Я использую функцию аварийного переключения CXF с использованием RetryStrategy в моем приложении и заметил, что он делает одну дополнительную повторную попытку, чем настроено максимальное количество повторных попыток. Глядя на код в RetryStrategy (показанный ниже), похоже, что альтернативный адрес get выполняет alternates.get(0) maxNumberOfRetries и alternates.remove(0) один раз, поэтому он делает одну дополнительную повторную попытку.

 protected <T> T getNextAlternate(List<T> alternates) {
    return stillTheSameAddress() ? alternates.get(0) : alternates.remove(0);
}

protected boolean stillTheSameAddress() {
    if (maxNumberOfRetries == 0) {
        return true;
    }
    // let the target selector move to the next address
    // and then stay on the same address for maxNumberOfRetries
    if (++counter <= maxNumberOfRetries) {
        return true;
    }
    counter = 0;
    return false;
}

После того, как список альтернатив пустой, приведенный ниже код в AbstractStaticFailoverStrategy прекращает повторную попытку. Но он уже выполнил один дополнительный раз к тому времени.

Это известная ошибка в фреймворке или я что-то здесь упускаю?

public String selectAlternateAddress(List<String> alternates) {
    String selected = null;
    if (alternates != null && !alternates.isEmpty()) {
        selected = getNextAlternate(alternates);
        Level level = getLogLevel();
        if (LOG.isLoggable(level)) {
            LOG.log(level,
                    "FAILING_OVER_TO_ADDRESS_OVERRIDE",
                    selected);
        }
    } else {
        LOG.warning("NO_ALTERNATE_TARGETS_REMAIN");
    }
    return selected;
}
...