Как настроить локальную резервную конфигурацию для службы Spring Cloud Config, если удаленное репо недоступно? - PullRequest
0 голосов
/ 24 сентября 2018

Мы планируем использовать Spring Cloud Config для нашего сервиса.Нашей самой большой проблемой является то, что когда контейнер запускается, он полагается на github, который будет доступен постоянно, чтобы он мог извлекать файлы конфигурации.В случае, если github не работает, какова лучшая практика для смягчения проблемы?

Я думал о том, чтобы сохранить локальную папку с конфигами в качестве резервной копии и настроить application.yml для ее отката (не знаю как).

Я собирался использоватьХранилища составных сред. См. Здесь: Раздел 2.1.8

Однако в нем говорится:

Любой тип ошибки при извлечении значений из хранилища среды приводит ксбой для всей составной среды.

Это означает, что при неудачном получении git он не возвращается к локальному компоненту составного.Я хотел бы это сделал.Кто-нибудь из вас сталкивался с подобной проблемой?Как вы решили это?

Вот хорошая статья о лучших практиках.Однако мне нужен обходной путь для случая 1: Лучшие практики по обработке недоступности GIT-репозитория

1 Ответ

0 голосов
/ 16 октября 2018

Spring-Cloud имеет свойство конфигурации для решения этой проблемы;

spring.cloud.config.server.git.basedir = /your/config/local/fallback/directory

ПРИМЕЧАНИЕ. - Если вы используете файл .yml, определите указанное выше свойство в соответствии с соглашениями yaml.

Чтобы получить базовые знания, ознакомьтесь с документацией: http://cloud.spring.io/spring-cloud-static/Finchley.RC1/single/spring-cloud.html#_version_control_backend_filesystem_use


По сути, здесь происходит следующее: если ваше приложение изначально могло подключаться к репозиторию git, который вы настроили вspring.cloud.config.server.git.uri = https://your-git/config-repo.git, затем при запуске config-server / container каталог, который вы определили в spring.cloud.config.server.git.basedir, создается локально, и по умолчанию spring-cloud клонирует ваши конфигурации в этот каталог, чтобы быть доступным как резервный.

Поэтому, когда ваш git-репозиторий недоступен, Spring-Cloud будет забирать ваши конфигурации из этого базового каталога.


Важные замечания, которые стоит отметить :

Если вы действительно не хотитехотите повторно клонировать конфигурации git только при запуске конфигурационного сервера, убедитесь, что свойство spring.cloud.config.server.git.clone-on-start НЕ установлено в true или совсем не задано - в противном случае каждый разЕсли вы перезапустите службу cloud-config, конфигурации будут снова удалены и заново клонированы, а если хранилище в данный момент недоступно, запуск приложения завершится неудачей - , и, возможно, вы не захотите этого .

Однако, если spring.cloud.config.server.git.clone-on-start установлен на false или вообще не установлен (в этом случае по умолчанию false), то репозиторий git будет только клонирован по требованию - следовательно, если хранилище недоступно, Spring-Cloud изящно откатится, чтобы выбрать конфигурации из spring.cloud.config.server.git.basedir

, даже если сервер конфигурации приложения (или его контейнер) перезапущени хранилище git недоступно, вы увидите что-то вроде ниже:

No custom http config found for URL: https://your-git/config-repo.git/info/refs?service=git-upload-pack
... s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3a26f314: startup date [Mon Oct 15 22:01:34 EDT 2018]; root of context hierarchy
... o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/your/config/local/fallback/directory/application.properties

Обратите внимание на строку:

Adding property source:file:/your/config/local/fallback/directory/application.properties

Вот такгде происходит волшебство.


Так что, если вы хотите, чтобы spring.cloud.config.server.git.basedir был доступен в качестве запасного варианта даже до первого запуска вашего config-сервера (и если ваш git-репо недоступен во времяПри запуске) вы можете выполнить следующие шаги:

  1. Вручную создать spring.cloud.config.server.git.basedir
  2. С вашего терминала cd /your/config/local/fallback/directory
  3. git clone https://your-git/config-repo.git при наличии репо
  4. Убедитесь, что все ваши конфигурационные файлы / папки / подпапки, включая папку .git, клонированы непосредственно в корневой каталогрезервный каталог.

    Например, существует тенденция, что git clone https://your-git/config-repo.git будет клонировать репо в резервный каталог как /your/config/local/fallback/directory/config-repo.Вам нужно будет скопировать все штопанное содержимое config-repo - включая папку .git - и прямо в /your/config/local/fallback/directory

  5. Запустить config-сервер (или его контейнер)в первый раз или всякий раз, когда !......... Вуаля !!

...