Изучаем серию микросервисов (6): микросервис springboot использует nacos в качестве центра конфигурации

Микросервисы

В прошлой статье мы представили, что сервис использует nacos в качестве центра регистрации, На самом деле у nacos есть еще одна функция центра конфигурации, но функция более мощная и простая, чем springcloud-config. Говорят, что конфигурационный файл всем хорошо понятен. Мы часто используем различные свойства для настройки различного контента в проекте, например, мы настраиваем URL-адрес, который вызывает другие службы, в файл конфигурации для единого управления. Однако в экологии распределенной архитектуры каждое приложение само поддерживает конфигурацию, чего явно недостаточно. Первое: динамическое обновление конфигурации, второе: одну и ту же конфигурацию нужно менять много раз, и третье: проблема безопасности. Поэтому мы обычно поддерживаем центр конфигурации в микросервисной системе для динамического изменения конфигурации и динамической передачи измененного контента на соответствующие сервисные узлы. Для достижения эффекта горячего обновления. Поэтому центр конфигурации также является важным компонентом микросервисной системы.

Внедрение nacos в качестве центра конфигурации

Теперь у нас есть много компонентов с открытым исходным кодом в качестве центра конфигурации, таких как zookeeper, apollo, spring cloud config и так далее. Независимо от того, какой компонент, конечная функция для достижения одинакова. Мы уже представили nacos как функцию обнаружения служб в прошлой статье.В последней статье мы сказали, что еще одна основная функция nacos — это центр конфигурации, который реализует добавление, удаление, изменение и проверку содержимого конфигурации, а также реализует горячее изменение конфигурации контента. Далее мы расскажем, как реализовать функцию конфигурации nacos.

nacos реализует настройку функции конфигурации

  • Войдите на страницу управления Nacos, на странице функций списка конфигурации нажмите кнопку «+» в правом верхнем углу, чтобы перейти на страницу «Новая конфигурация», и заполните содержимое, как показано ниже:

在这里插入图片描述 在这里插入图片描述Кратко объясним приведенную выше конфигурацию:

  1. Идентификатор данных: серый
  2. Группа: нет необходимости временно изменять, можно использовать группу DEFAULT_GROUP по умолчанию.
  3. Формат конфигурации: обычно выбираем yaml или properties или json
  4. Содержимое конфигурации: содержимое конфигурации, загружаемое приложением, это только пример.

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

curl -X "POST" "http://127.0.0.1:8848/nacos/v1/cs/configs" \
     -H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \
     --data-urlencode "dataId=nacos.properties" \
     --data-urlencode "group=DEFAULT_GROUP" \
     --data-urlencode "content=useLocalCache=true
  • используется в проекте
  1. Создайте приложение Spring Boot, которое можно назвать: alibaba-nacos-config. пом-файл:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>


<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>0.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.2</version>
        <optional>true</optional>
    </dependency>
</dependencies>

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

  • Создайте основной класс приложения и реализуйте интерфейс контроллера:
@SpringBootApplication
public class TestApplication {

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

    @Slf4j
    @RestController
    @RefreshScope
    static class TestController {

        @Value("${gray-city}")
        private String city;

        @GetMapping("/test")
        public String hello() {
            return city;
        }

    }

}
  • Создайте файл конфигурации bootstrap.properties и настройте имя службы и адрес Nacos.
spring.application.name=alibaba-nacos-config
server.port=8001
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

Примечание: здесь необходимо использовать bootstrap.properties. При этом значение spring.application.name должно совпадать с Data Id конфигурации, созданным на предыдущем этапе Nacos (за исключением суффикса .properties или .yaml)

  • Запустите приложение, созданное выше
2021-01-27 18:29:43.497  INFO 93597 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'alibaba-nacos-config.properties', group: 'DEFAULT_GROUP'
2021-01-27 18:29:43.498  INFO 93597 --- [main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config.properties'}]}
  • Проверка выборки конфигурации и динамического обновления

Используйте такие инструменты, как curl или postman, для доступа к интерфейсу: localhost: 8001 / test Если все нормально, будет возвращен контент, настроенный в Nacos. Затем на странице Nacos измените содержимое, нажмите «Опубликовать», а затем войдите в интерфейс, и вы увидите, что результат возврата изменился. При этом на клиентской стороне приложения мы также можем видеть следующие логи:

2021-01-27 18:39:14.162  INFO 93597 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [gray-city]

Подробное объяснение правил конфигурации Nacos

Содержимое конфигурации, созданное в Nacos, выглядит следующим образом:

  • Идентификатор данных: alibaba-nacos-config.properties
  • Группа: DEFAULT_GROUP

Если разобрать его, то в основном есть три элемента, которые соответствуют содержанию конфигурации конкретных приложений следующим образом:

  • alibaba-nacos-config в идентификаторе данных: конфигурация, соответствующая клиенту, на самом деле является именем службы.
  • spring.cloud.nacos.config.prefix, значение по умолчанию — ${spring.application.name}, то есть: имя службы
  • свойства в идентификаторе данных: соответствует конфигурации клиента spring.cloud.nacos.config.file-extension, значение по умолчанию — свойства
  • Значение группы DEFAULT_GROUP: соответствует конфигурации клиента spring.cloud.nacos.config.group, значение по умолчанию — DEFAULT_GROUP.

Правила конфигурации, которые должны быть загружены в приложение со значениями по умолчанию: Идентификатор данных = ${spring.application.name}.properties, Группа = DEFAULT_GROUP.

  1. Если мы хотим загружать контент в формате yaml вместо формата Properties, мы можем загрузить Data ID=alibaba-nacos-config.yaml, Group=DEFAULT_GROUP с помощью следующей конфигурации.
  2. Если мы управляем конфигурацией в группах, мы можем загрузить Data ID=alibaba-nacos-config.yaml, Group=TEST_GROUP через следующую конфигурацию

Для конфигурации spring.cloud.nacos.config.group он по-прежнему используется для различения содержимого конфигурации разных целей или для различения конфигурации разных сред. Для получения конкретных сведений о конфигурации мы можем обратиться к примеру конфигурации на официальном сайте. Описание пространства имен: если есть конфигурация с тем же идентификатором группы или данных. Одним из распространенных сценариев пространства имен является разграничение и изоляция конфигураций различных сред, например изоляция ресурсов (например, конфигураций и служб) в среде разработки и тестирования и в производственной среде.

  • Во-первых, в Nacos создайте несколько пространств имен на основе имени среды.
  • В верхней части списка конфигураций видно, что помимо Public есть еще несколько только что созданных Namepsace. Создайте содержимое конфигурации для приложения alibaba-nacos-config в пространствах DEV и TEST соответственно.

在这里插入图片描述

  • В конфигурационный файл приложения alibaba-nacos-config добавьте указанную конфигурацию Namespace, например: spring.cloud.nacos.config.namespace=уникальный идентификатор выше. (Здесь следует отметить, что в конфигурации пространства имен используется не имя, а идентификатор пространства имен.) Официально рекомендуемый способ — использовать пространство имен для различения различных сред, освобождая группу от свободы, что позволяет использование группы, чтобы сосредоточиться на управлении группой бизнес-уровня.

Многофайловая загрузка конфигурации Nacos, соответствующая взаимосвязь содержимого конфигурации в Nacos управляется следующими тремя параметрами:

  • spring.cloud.nacos.config.prefix
  • spring.cloud.nacos.config.file-extension
  • spring.cloud.nacos.config.group

По умолчанию будет загружена конфигурация Data ID=${spring.application.name}.properties и Group=DEFAULT_GROUP. Сначала создайте содержимое конфигурации Data ID=a.properties, Group=DEFAULT_GROUP и Data ID=b.properties, Group=DEFAULT_GROUP в Nacos. Затем настройте два содержимого конфигурации для загрузки с помощью параметра spring.cloud.nacos.config.ext-config в приложении Spring Cloud:

spring.cloud.nacos.config.ext-config[0].data-id=a.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=b.properties
spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[1].refresh=true

Конфигурация spring.cloud.nacos.config.ext-config представляет собой тип списка массивов. Каждая конфигурация содержит три параметра: data-id, group, refresh;

Сохранение данных Nacos

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

  1. Установить базу данных
  2. Инициализируйте базу данных MySQL, файл инициализации базы данных: nacos-mysql.sql, этот файл можно получить в каталоге conf в пакете Nacos.
  3. Измените файл conf/application.properties, добавьте поддержку конфигурации источника данных MySQL, добавьте (в настоящее время только mysql) URL-адрес источника данных, имя пользователя и пароль.

Алгоритм согласованности данных nacos, мы представим его в следующих статьях.

Кластерное развертывание Nacos

在这里插入图片描述В каталоге conf Nacos есть файл cluster.conf.example, вы можете использовать расширение примера напрямую или можете создать файл cluster.conf отдельно, а затем открыть и настроить адрес экземпляра Nacos для развертывания здесь. В этой статье рассматривается запуск 3 серверов Nacos в разных локальных конечных точках, которые можно настроить следующим образом:

127.0.0.1:8841
127.0.0.1:8842
127.0.0.1:8843

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

Развертывание производства

В фактическом развертывании производственной среды, поскольку каждый экземпляр распределен на разных узлах, вам нужно только выполнить команду sh startup.sh в каталоге bin Nacos каждого узла. Кроме того, нам нужно сделать точку доступа для трех экземпляров Nacos, которые можно запустить, чтобы добиться балансировки нагрузки для них. Есть много способов реализовать это Мы можем использовать nginx для балансировки нагрузки обратного прокси на следующие три узла, которые являются VIP на рисунке выше. После этого мы можем настроить адрес прокси через Nginx:http://localhost:8080/nacos/ для доступа к Nacos веснойОблачные приложения также могут использовать этот адрес в качестве адреса доступа центра регистрации и центра конфигурации для настройки (также spring.cloud.nacos.config.server-addr=127.0.0.1:8841, 127.0.0.1:8842, 127.0.0.1: 8843). Если вы хотите узнать больше о микросервисах, добро пожаловать в официальный аккаунт:Стек ИТ-технологий. чтобы узнать больше обучающего контента.