SpringCloud боевая пятерка: единый центр конфигурации

Spring Cloud
Привет всем, я рано утром В этой главе мы изучим использование единого центра конфигурации SpringCloud. Если у вас есть какие-либо вопросы или комментарии, пожалуйста, напишите mr_beany@163.com

Первый: зачем вам единый центр конфигурации

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

Второе: создать единый центр конфигурации

1: Создать процесс с помощьюSpringCloud Practice II: Создание клиентов и высокая доступностьТакой же

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


2: Откройте файл pom и добавьте зависимости

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

3: Измените класс запуска, чтобы служба стала серверной частью конфигурации.

Добавить аннотацию @EnableConfigServer


4: Создайте удаленный репозиторий git

Вы можете выбрать gitHub, облако кода или свой собственный сервер git, здесь я использую облако кода.


создать новый файл


Скопируйте содержимое файла конфигурации клиентской службы в файл и отправьте


5: Настройте адрес git службы конфигурации.

Изменить application.yml

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/beany/config-juejindome
          username: mr_beany@163.com
          password: 2ewed678wediwen

где uri — адрес репозитория git, username — имя пользователя git, а password — пароль git

6: Запустите проект, ввод через браузер

http://localhost:8084/client-dev.yml


То, что мы видим, это то, что мы добавили в git

Глядя на консоль, мы также можем обнаружить, что удаленный файл git был перенесен на локальный git.


Так что, если мы хотим изменить путь к извлеченному файлу?

Измените файл конфигурации:

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/beany/config-juejindome
          username: mr_beany@163.com
          password: zy555566...
          basedir: D:\work\file\juejinDome\cloudTest\configBasedir

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


Примечание. Если мы хотим извлечь одну и ту же конфигурацию в разных средах, нам нужно создать новый client.yml на удаленном git. Таким образом, каждый раз, когда вы обращаетесь к yml в другой среде, client.yml и client-dev.yml будут объединяться перед использованием.

7: Итак, почему наш файл — client.yml, и зачем нам нужен доступ к client-dev.yml в адресной строке?

Доступ к указанному файлу конфигурации в следующих формах

/{name}—{profites}.yml
/{tabel}/{åame}—{profiles}.yml
name 服务名
profiles 环境
tabet 分支(branch)
.yml  指定返回的数据格式,也可以写成.json  .properties   他会自动转换成指定的格式

8: Формат тестовых данных



9: Тестовый доступ к различным средам

Переименуйте client.yml в git в client-dev.yml.


Измененный контент:

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: client
evn: 
  dev

создать новый файл




ps: обратите внимание, что это должно быть env вместо evn, рука неправильная

Третье: используйте единый центр конфигурации

1: Добавить зависимости

Откройте файл pom клиентской службы и добавьте следующие зависимости.

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

2: Измените файл конфигурации клиентской службы и настройте конфигурацию

Сначала измените имя файла конфигурации наapplication.ymlпревратиться вbootstrap.yml

spring:
  application:
    name: client
  cloud:
    config:
      enabled: true
      discovery:
        service-id: CONFIG
      profile: dev

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


Примечание. Поскольку в производственной среде должно быть запущено несколько eureka, в реальных ситуациях необходимоО настройке еврикаТакже пропишите в bootstrap.yml, т.е.:

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: client
  cloud:
    config:
      discovery: 
        enabled: true
        service-id: CONFIG
      profile: dev

Четыре: динамически изменяйте файл конфигурации, чтобы он вступил в силу без перезапуска.

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

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

1: Ввести зависимости

Откройте файл pom службы конфигурации и добавьте зависимости

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2: Запустите RabbitMQ

существуетпредыдущая главаМы уже объяснили, как запустить RabbitMQ с установкой Docker, так что давайте воспользуемся этим.

3: изменить файл конфигурации службы конфигурации

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/beany/config-juejindome
          username: mr_beany@163.com
          password: zy555566...
          basedir: D:\work\file\juejinDome\cloudTest\configBasedir
  rabbitmq:
    host: 192.168.88.134
    username: user
    password: password

Добавьте информацию о пароле адресной учетной записи rabbitmq и перезапустите.

Войдите на страницу управления rabbitmqhttp://192.168.88.134:15672


Здесь мы видим, что SpringCloud BUS создал для нас очередь

4: Измените файл pom клиентской службы.

Добавьте следующие зависимости

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

5: Измените файл конфигурации client-dev.yml клиентской службы на git.

Добавьте следующую конфигурацию

  eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: client
  rabbitmq:
    host: 192.168.99.100
    username: user
    password: password
env: 
  test

6: Перезапустите клиент


В MQ уже есть два сообщения очереди.

7: Создайте TestController.java

package com.chuchen.client.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:
 * @Author:
 * @CreateDate: 2019/4/24 11:17
 */
@RestController
@RefreshScope
public class TestController {

    @Value("${env}")
    private String env;

    @GetMapping("/printEnv")
    public String printEnv(){
        return env;
    }
}

Где @RefreshScope автоматически обновляет файл конфигурации

8: ввод через браузер

http://localhost:8081/printEnv


Вы можете получить конфигурацию, которую мы написали на git.

9: Изменить файл конфигурации службы конфигурации

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/beany/config-juejindome
          username: mr_beany@163.com
          password: zy555566...
          basedir: D:\work\file\juejinDome\cloudTest\configBasedir
  rabbitmq:
    host: 192.168.99.100
    username: user
    password: password
management:
  endpoints:
    web:
      exposure:
        include: "*"

Здесь мы выбираем, чтобы открыть интерфейс, Функция этого интерфейса — уведомить систему о повторном обновлении файла конфигурации для достижения динамического обновления при изменении файла в git.

10: Измените файл конфигурации на git

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: client
  rabbitmq:
    host: 192.168.99.100
    username: user
    password: password
env: 
  test1111

11: Откройте почтальон для доступа к службе конфигурации

http://localhost:8084/actuator/bus-refresh


12: ввод через браузер

http://localhost:8081/printEnv


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

13: настройки репозитория git WebHooks

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

Выберите склад, нажмите «Управление», выберите WebHooks, нажмите «Добавить».


Обратите внимание, что URL-адрес здесь — это адрес доступа к внешней сети, вы можете добавить его после развертывания сервера.


Пятое: конец

Спасибо за вашу поддержку.Серия статей будет обновляться одна за другой.Спасибо.

Для тех, кто не знает о springBoot, вы можете прочитать мойСерия руководств по SpringBoot