Центр конфигурации Consul серии Spring Cloud

Spring Cloud
Центр конфигурации Consul серии Spring Cloud

Мы уже узнали о Spring Cloud Config ранее:

Он обеспечивает функцию центра конфигурации, но должен взаимодействовать с git, svn или внешним хранилищем (например, различными базами данных) и должен взаимодействовать с Spring Cloud Bus.«Шина сообщений Spring Cloud Series Bus»Реализовать обновление конфигурации.

В предыдущем курсе мы также изучили Spring Cloud Consul, в то время мы объяснили его схему использования в качестве реестра, и он был официально рекомендован Spring Cloud для замены реестра Eureka. Теперь, когда используется Consul, можно использовать функцию центра конфигурации, предоставляемую Consul, и не требуется никаких дополнительных git, svn, базы данных и т. д., а обновление конфигурации может быть достигнуто без сотрудничества с Bus.

Spring Cloud официально заявляет, что Consul можно использовать как альтернативу центру конфигурации Spring Cloud Config.

Официальная документация: https://cloud.spring.io/spring-cloud-static/spring-cloud-consul/2.2.2.RELEASE/reference/html/#spring-cloud-consul-config.

О центре регистрации Консул мы уже узнали, для тех, кто не знаком, просьба ознакомиться с предыдущими курсами. Сегодня мы в основном объясним, как использовать Consul в качестве центра конфигурации.

Представляем Консула

Consul — это инструмент с открытым исходным кодом, выпущенный HashiCorp, который используется для обнаружения сервисов и настройки распределенных систем. По сравнению с другими решениями для регистрации и обнаружения распределенных сервисов, решение Consul является более универсальным, со встроенной платформой регистрации и обнаружения сервисов, реализацией протокола распределенного консенсуса, проверкой работоспособности,Key/Value 存储(配置中心), Решение с несколькими центрами обработки данных больше не требует использования других инструментов (таких как ZooKeeper и т. д.), и оно относительно простое в использовании.

Консул написан на языке Go, поэтому, естественно, портабельный (поддерживает Linux, Windows и Mac OS), установочный пакет содержит всего один исполняемый файл, что удобно для развертывания и без проблем работает с легковесными контейнерами, такими как Docker.

Особенности Консула

  • Алгоритм плота

  • обнаружение службы

  • медицинское обследование

  • Хранилище ключей/значений (распределительный центр)

  • Несколько центров обработки данных

  • Поддержка интерфейса протокола http и dns

  • Официально предоставить веб-интерфейс управления

Консул инсталляция

Нажмите на ссылку, чтобы посмотреть:Видео по установке Консула(Для получения дополнительной информации, пожалуйста, обратите внимание на паблик-аккаунт "Mr. Hello Ward")

Consul — это сторонний инструмент, написанный на языке go, который необходимо устанавливать и использовать отдельно.

скачать

Посетите официальный сайт Консула: https://www.consul.io, чтобы загрузить последнюю версию Консула.

Поддерживает установку в нескольких средах, на снимке экрана показаны только некоторые среды.

Установить

Метод установки одного узла и кластера был подробно объяснен в предыдущих курсах.Здесь мы в основном объясняем роль центра конфигурации Consul.Мы можем установить один узел Consul на Windows.

В скачанном сжатом пакете только одинconsul.exeзапускаемый файл.

cd в соответствующий каталог и используйте cmd для запуска Consul

# -dev表示开发模式运行
consul agent -dev -client=0.0.0.0

Чтобы облегчить запуск, вы также можете создать сценарий для запуска в том же каталоге, что и consul.exe.Содержимое сценария выглядит следующим образом:

consul agent -dev -client=0.0.0.0
pause

Получите доступ к фону управления: http://localhost:8500/ Рисунок ниже означает, что наша служба Consul была успешно запущена.

Начальная конфигурация

Нажмите на ссылку, чтобы посмотреть:Информационное видео о начальной настройке(Для получения дополнительной информации, пожалуйста, обратите внимание на паблик-аккаунт "Mr. Hello Ward")

Создать базовый каталог

Используя Consul в качестве центра конфигурации, первым шагом будет создание каталога и сохранение информации о конфигурации в Consul.

нажмите менюKey/Valueнажмите еще разCreateкнопка.

Создайтеconfig/Базовый каталог можно понимать как самую внешнюю папку, в которой находится файл конфигурации.

Создать каталог приложений

нажмитеconfigв папку.

нажмите еще разCreateкнопка.

СоздайтеorderService/Каталог приложений, в котором хранится соответствующее приложение микросервиса.defaultИнформация о конфигурации среды.

Каталог мультисредовых приложений

Предположим, наш проект имеет несколько окружений:default,test,dev,prod,существуетconfigСоздайте каталог с несколькими средами в каталоге.

  • orderServiceПапка перепискиdefaultокружающая обстановка
  • orderService-testПапка перепискиtestокружающая обстановка
  • orderService-devПапка перепискиdevокружающая обстановка
  • orderService-prodПапка перепискиprodокружающая обстановка

Начальная конфигурация

кdevв качестве примера щелкнитеorderService-devв папку.

нажмитеCreateкнопка готова к созданиюKey/Valueинформация о конфигурации.

Заполните ключ:orderServiceConfig

Введите значение:

name: order-service-dev
mysql:
  host: localhost
  port: 3006
  username: root
  password: root

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

Подготовка окружающей среды

consul-config-demoАгрегатная инженерия.SpringBoot 2.2.4.RELEASE,Spring Cloud Hoxton.SR1.

  • order-service: Заказать услугу
  • order-service02: Заказать услугу

Практический случай

Нажмите на ссылку, чтобы посмотреть:Практический видеоролик Consul Configuration Center(Для получения дополнительной информации, пожалуйста, обратите внимание на паблик-аккаунт "Mr. Hello Ward")

добавить зависимости

В основном добавлены проекты, которым нужно получать информацию о конфигурации от Consulspring-cloud-starter-consul-configЗависимость, полные зависимости следующие:

order-serviceа такжеorder-service02Зависимость постоянная.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>order-service</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 继承父依赖 -->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>consul-config-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <!-- 项目依赖 -->
    <dependencies>
        <!-- spring boot web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- spring boot actuator 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- spring cloud consul discovery 服务发现依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!-- spring cloud consul config 配置中心依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-config</artifactId>
        </dependency>

        <!-- spring boot test 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

</project>

конфигурационный файл

Старое правило, файл конфигурации должен называтьсяbootstrap.ymlПомимо использования функции центра конфигурации Consul, мы также регистрируем микросервисы в реестре Consul.order-serviceа такжеorder-service02За исключением порта и идентификатора зарегистрированного экземпляра, остальные элементы конфигурации одинаковы.Полная конфигурация выглядит следующим образом:

server:
  port: 9090 # 端口

spring:
  application:
    name: order-service # 应用名称
  profiles:
    active: dev # 指定环境,默认加载 default 环境
  cloud:
    consul:
      # Consul 服务器地址
      host: localhost
      port: 8500
      # 配置中心相关配置
      config:
        # 是否启用配置中心,默认值 true 开启
        enabled: true
        # 设置配置的基本文件夹,默认值 config 可以理解为配置文件所在的最外层文件夹
        prefix: config
        # 设置应用的文件夹名称,默认值 application 一般建议设置为微服务应用名称
        default-context: orderService
        # 配置环境分隔符,默认值 "," 和 default-context 配置项搭配
        # 例如应用 orderService 分别有环境 default、dev、test、prod
        # 只需在 config 文件夹下创建 orderService、orderService-dev、orderService-test、orderService-prod 文件夹即可
        profile-separator: '-'
        # 指定配置格式为 yaml
        format: YAML
        # Consul 的 Key/Values 中的 Key,Value 对应整个配置文件
        data-key: orderServiceConfig
        # 以上配置可以理解为:加载 config/orderService/ 文件夹下 Key 为 orderServiceConfig 的 Value 对应的配置信息
        watch:
          # 是否开启自动刷新,默认值 true 开启
          enabled: true
          # 刷新频率,单位:毫秒,默认值 1000
          delay: 1000
      # 服务发现相关配置
      discovery:
        register: true                                # 是否需要注册
        instance-id: ${spring.application.name}-01    # 注册实例 id(必须唯一)
        service-name: ${spring.application.name}      # 服务名称
        port: ${server.port}                          # 服务端口
        prefer-ip-address: true                       # 是否使用 ip 地址注册
        ip-address: ${spring.cloud.client.ip-address} # 服务请求 ip

Класс сущности файла конфигурации

order-serviceа такжеorder-service02Код класса сущностей тот же.

package com.example.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "mysql")
public class MySQLProperties {

    private String host;
    private Integer port;
    private String username;
    private String password;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

слой управления

order-serviceа такжеorder-service02Код уровня управления непротиворечив.

Обратите внимание на необходимость добавления@RefreshScopeАннотация используется для обновления области для автоматического обновления значений свойств.

package com.example.controller;

import com.example.config.MySQLProperties;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;

@RefreshScope
@RestController
public class ConfigController {

    @Autowired
    private MySQLProperties mySQLProperties;

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

    @GetMapping("/name")
    public String getName() {
        return name;
    }

    @GetMapping("/mysql")
    public MySQLProperties getMySQLProperties() {
        return mySQLProperties;
    }

}

стартовый класс

order-serviceа такжеorder-service02Код класса запуска непротиворечив.

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }

}

тестовое задание

Перед изменением информации о конфигурации

Посетите: http://localhost:9090/name Результат выглядит следующим образом:

Посетите: http://localhost:9090/mysql Результаты следующие:

Изменить информацию о конфигурации

Изменить центр конфигурации ConsulorderService-devИнформация о конфигурации среды:

name: order-service-dev-2.0
mysql:
  host: localhost
  port: 3006
  username: root123
  password: root123

После изменения информации о конфигурации

Информация о печати консоли выглядит следующим образом:

[TaskScheduler-1] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-config/order-service-dev/'}, BootstrapPropertySource {name='bootstrapProperties-config/order-service/'}, BootstrapPropertySource {name='bootstrapProperties-config/orderService-dev/'}, BootstrapPropertySource {name='bootstrapProperties-config/orderService/'}]
[TaskScheduler-1] o.s.boot.SpringApplication               : The following profiles are active: dev
[TaskScheduler-1] o.s.boot.SpringApplication               : Started application in 3.748 seconds (JVM running for 142.28)
[TaskScheduler-1] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [name, mysql.password, mysql.username]

Consul использует Spring для планирования задачSpring TaskSchedulerдля мониторинга обновлений файла конфигурации.

По умолчанию это пул потоков задач по времени.ThreadPoolTaskScheduler,ЭтоpoolSizeзначение1. изменитьTaskScheduler, пожалуйста, создайтеTaskSchedulerиспользоватьConsulConfigAutoConfiguration.CONFIG_WATCH_TASK_SCHEDULER_NAMEКонстантный именованный тип bean-компонента.

Посетите: http://localhost:9090/name Результат выглядит следующим образом:

Посетите: http://localhost:9090/mysql Результаты следующие:

Суммировать

Consul от HashiCorp — универсальный компонент. Инструменты, которые можно использовать для обнаружения и настройки служб. Разработанный на языке go, он обладает хорошей переносимостью и включен в Spring Cloud.

Что касается реестра, Netflix Eureka прекратил разработку новых версий, и Consul стал отличной альтернативой.

Что касается центра конфигурации, Consul также может заменить Spring Cloud Config в качестве центра конфигурации, и ему не нужно взаимодействовать с такими инструментами, как Git, SVN и шина сообщений Bus, для обновления конфигурации кластера.

Этот документ принимает知识共享「署名-非商业性使用-禁止演绎 4.0 国际」许可协议.

Каждый может пройти分类увидеть больше оSpring Cloudстатья.

🤗 твой点赞а также转发моя самая большая поддержка.

📢 Отсканируйте код, чтобы следовать哈喽沃德先生Каждая статья «Документ+Видео» снабжена специальным видео-пояснением, облегчающим обучение~