Распределенный центр настройки микросервисов

Spring Boot API Эксплуатация и обслуживание

1. Центр распределенной конфигурации

В распределенной системе количество сервисов резко возрастает, а ее конфигурационные файлы должны управляться единообразно и обновляться в режиме реального времени.Необходим компонент распределенного конфигурационного центра. Spring Cloud предоставляет компонент центра конфигурации Spring Cloud Config, который поддерживает службы конфигурации в удаленных репозиториях Git и локальных файлах. По умолчанию git используется для хранения информации о конфигурации, а в примере автора также используется репозиторий git по умолчанию, чтобы можно было легко управлять содержимым конфигурации и получать к нему доступ с помощью клиентского инструмента git.

配置服务器工作示意图
Схема работы сервера конфигурации

В компоненте Spring Cloud Config есть две роли: одна — это сервер конфигурации сервера конфигурации, который предоставляет информацию о файлах конфигурации для других служб; другая — это клиент конфигурации, который является другими службами и извлекает конфигурацию с сервера конфигурации в запускать.
Ниже описаны методы создания и реализации Config Server и Config Client соответственно.

2. Сервер конфигурации

2,1 баночки в пом

Просто добавьте ссылки на следующие два пакета jar.

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>jsr311-api</artifactId>
                    <groupId>javax.ws.rs</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

Поскольку сервер Spring Cloud Config предоставляет конфигурацию для клиента посредством обнаружения службы, здесь представлен стартер консула, и и сервер конфигурации, и клиент зарегистрированы в кластере консула.

2.2 Начальный класс

Просто, потому что Spring Cloud предоставляет множество готовых функций для активации сервера конфигурации через аннотацию spring-cloud-config-server.

@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

@EnableConfigServerАннотация очень важна, помечая службу как сервер конфигурации;@EnableDiscoveryClientЗарегистрируйте службу, чтобы другие службы могли ее обнаружить и вызвать.

2.3 bootstrap.yml

server:
  port: 8888

spring:
  application:
    name: config-server
  cloud:
      consul:
        discovery:
          preferIpAddress: true
          enabled: true
          register: true
          service-name: config-service
          //...
        host: localhost
        port: 8500
---
spring:
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/keets/Config-Repo.git
          searchPaths: ${APP_LOCATE:dev}
          username: user
          password: pwd

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

Пока настроен сервер конфигурации, это очень просто?

3. Настроенный git-репозиторий

Репозиторий, который настраивает конфигурацию сервера,https://gitee.com/keets/Config-Repo.git. Автор создал в этом репозитории две папки: dev и prod. И в папке dev создается новый файл configclient-dev.yml. Почему он так называется, можете ли вы назвать его как хотите? Ответ — нет, давайте посмотрим на правила именования файла конфигурации.

Отношение сопоставления между URL-адресом и файлом конфигурации выглядит следующим образом:

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties
    Приведенный выше URL-адрес сопоставит файл конфигурации, соответствующий {application}-{profile}.yml, {label} соответствует разным веткам на git, по умолчанию используется master
    Например, Config Client, {application} соответствуетspring.application:configclient, exp соответствует {profile}, и если {label} не указан, по умолчанию используется master.

Недавно созданный файл configclient-dev.yml выглядит следующим образом:

spring:
  profiles: dev

cloud:
  version: Dalston.SR4

4. Клиент конфигурации

4.1 баночки в пом

Просто добавьте ссылки на следующие два пакета jar.

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>jsr311-api</artifactId>
                    <groupId>javax.ws.rs</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

Добавлен модуль мониторинга spring-boot-starter-actuator, который включает API обновления /refresh для динамического обновления информации о конфигурации. Остальные такие же, как добавленные в конфигурации сервера, нечего и говорить.

4.2 Начальный класс

Просто, потому что Spring Cloud предоставляет множество готовых функций для активации сервера конфигурации через аннотацию spring-cloud-config-server.

@SpringBootApplication
@EnableDiscoveryClient
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

Не требуется настройка клиента@EnableConfigServerаннотация.

4.3 bootstrap.yml


server:
  port: 9901
cloud:
  version: Brixton SR7

spring:
  cloud:
    consul:
      discovery:
        preferIpAddress: true
        enabled: true
        register: true
        service-name: config-client
      //...
      host: localhost
      port: 8500

---
spring:
  profiles:
    active: dev
  application:
      #app名称
    name: configclient
  cloud:
    config:
      #指定profile
      profile: dev
      label: master
      discovery:
        enabled: true
        #server名
        service-id: config-service
      enabled: true
      fail-fast: true

---
spring:
  profiles: default
  application:
    name: configclient

Из приведенной выше конфигурации мы видим, что профиль, который мы активировали, называется dev, а настроенная служба конфигурации называетсяconfig-service, указывает, что нужно извлечь конфигурацию из основной ветки. Таким образом, когда configclient запускается, он обращается к серверу конфигурации, чтобы получить информацию о файле конфигурации соответствующего файла configclient-dev.

4.4 TestResource

Автор создал новый TestResource, и соответствующей конечной точкой API является /api/test.

    @Value("${cloud.version}")
    private String version;

    @GetMapping("/test")
    public String from() {
        return version;
    }

cloud.versionВ приведенном выше конфигурационном файле видно, что Brixton SR7 указан по умолчанию, а значение, установленное автором в конфигурационном центре, — Dalston.SR4.

5. Результаты испытаний

5.1 Получить конфигурацию

Во-первых, давайте взглянем на информацию журнала при запуске клиента конфигурации, действительно ли в соответствии с нашей конфигурацией вытягивать информацию configclient-dev с сервера конфигурации.

ccstart
ccstart

Судя по журналу, это соответствует приведенной выше гипотезе конфигурации. Далее мы проверяем интерфейс API, предоставляемый клиентом конфигурации.

pj
pj

Видно, что это действительно Dalston.SR4, и служба конфигурации может работать нормально.

5.2 Конфигурация динамического обновления

Spring Cloud Config также может реализовать функцию динамического обновления конфигурации. Затем мы изменим конфигурацию cloud.version в репозитории конфигурации на Camden SR7 и применим конфигурацию, обновив конечную точку /refresh клиента конфигурации.
Как вы можете видеть на изображении ниже, результаты соответствуют ожиданиям.

rr
rr

Обновление конфигурации здесь выполняется вручную, и его также можно запустить с помощью github. Когда код отправляется локально в git, вызывается URL-адрес, указанный на следующем рисунке. Можно использовать две конечные точки:

  • Refresh: выполнение /refresh в пост-режиме обновит конфигурацию в env.
  • перезапуск: если информация о конфигурации была введена в bean-компонент, поскольку bean-компонент является одноэлементным, измененная конфигурация не будет загружена.
    Нужно выполнить/перезапустить через метод POST, также нужно настроить endpoints.restart.enabled:true.

Второй случай требует больше времени, т.@RefreshScopeЭто аннотация, предоставленная Spring Cloud, и значение переменной в bean-компоненте будет обновлено при выполнении обновления. Взгляните на объяснение исходного кода ниже.

Convenience annotation to put a @Bean definition in RefreshScope.
Beans annotated this way can be refreshed at runtime and any components that are using them will get a new instance on the next method call, fully initialized and injected with all dependencies.

Общая идея выше заключается в том, что RefreshScope — это удобная аннотация компонента, и эта аннотация может обновлять компонент во время выполнения. Другие компоненты, использующие этот компонент, получат новый инициализированный экземпляр объекта при следующем вызове.

Страница настроек github выглядит следующим образом.

githook
githook

6. Резюме

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

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

Исходный код этой статьи
github: GitHub.com/Доступный ETS2012/S…
gitee: git ee.com/can ets/judgment day you…

Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер

微信公众号
Публичный аккаунт WeChat


Ссылаться на

  1. Spring Cloud Config
  2. Центр распределенной конфигурации