Почему сервер конфигурации с несколькими узлами каждый раз извлекает конфигурацию из одного и того же узла

#spring-cloud #spring-cloud-config

#spring-cloud #spring-cloud-config

Вопрос:

В центре настройки запущено три узла, при запуске сервера я обнаружил, что сервер каждый раз извлекает конфигурацию с одного и того же конфигурационного сервера, и только конфигурационный сервер обрабатывает запрос.

Журнал запуска моего сервера:

 Multiple Config Server Urls found listed.
Fetching config from server at: http://***:20001/
Located environment: name=onip-boot, profiles=[prod], label=null, version=..., state=null
 

Я прочитал исходный код ConfigServicePropertySourceLocator.java , в строке 205, я обнаружил, что, похоже, он всегда запрашивает у первого получение конфигурации, а затем возвращает, если только он не завершится неудачей и не зациклит следующий. Итак, Spring Cloud Config не имеет возможности балансировки нагрузки?

 for (int i = 0; i < noOfUrls; i  ) {
    Credentials credentials = properties.getCredentials(i);
    String uri = credentials.getUri();
    String username = credentials.getUsername();
    String password = credentials.getPassword();

    logger.info("Fetching config from server at : "   uri);

    try {
        HttpHeaders headers = new HttpHeaders();
        addAuthorizationToken(properties, headers, username, password);
        if (StringUtils.hasText(token)) {
            headers.add(TOKEN_HEADER, token);
        }
        if (StringUtils.hasText(state) amp;amp; properties.isSendState()) {
            headers.add(STATE_HEADER, state);
        }

        final HttpEntity<Void> entity = new HttpEntity<>((Void) null, headers);
        response = restTemplate.exchange(uri   path, HttpMethod.GET, entity,
                Environment.class, args);
    }
    catch (HttpClientErrorException e) {
        if (e.getStatusCode() != HttpStatus.NOT_FOUND) {
            throw e;
        }
    }
    catch (ResourceAccessException e) {
        logger.info("Connect Timeout Exception on Url - "   uri
                  ". Will be trying the next url if available");
        if (i == noOfUrls - 1)
            throw e;
        else
            continue;
    }

    if (response == null || response.getStatusCode() != HttpStatus.OK) {
        return null;
    }

    Environment result = response.getBody();
    return resu<
}
 

Комментарии:

1. Если под балансировкой нагрузки вы подразумеваете циклический перебор, нет, он этого не делает. Тем не менее, он балансирует нагрузку на запросы с использованием первого алгоритма Alive.

2. Я понял. 3q. На самом деле не обязательно использовать стратегию балансировки нагрузки