Микросервисы Java нового поколения Nacos-Управление конфигурацией

Java

предисловие

вышеNacos нового поколения микросервисов JavaБыла представлена ​​среда микросервисов Nacos и ее функции в регистрации и обнаружении служб. В этой статье в основном будет представлена ​​​​еще одна мощная функция: управление конфигурацией. Узнайте, как использовать Nacos для реализации конфигурации распределенных служб централизованно с помощью унифицированного управления. интерфейс Обслуживание и обновления в режиме реального времени.

Основное содержание этой статьи следующее:

  • Введение в концепции управления конфигурацией Nacos
  • Как управлять конфигурацией в Nacos
  • Управление конфигурацией Nacos в нескольких средах

Введение в управление конфигурацией Nacos

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

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

  • Пространство имен

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

  • Элемент конфигурации

    Конкретный настраиваемый параметр и его значение, обычно в виде ключ-параметр=значение-параметра. Например, мы часто настраиваем уровень вывода журнала системы (logLevel=INFO|WARN|ERROR) — это элемент конфигурации.

  • Набор конфигураций

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

  • Идентификатор набора конфигураций (идентификатор данных)

    Идентификационный идентификатор набора конфигураций, который используется для организации наборов конфигураций, разделяющих систему. Система или приложение могут содержать несколько наборов конфигурации. Официально рекомендуется использовать Java-подобный пакет (например, com.taobao.tc.refund.log.level) для определения идентификатора данных, чтобы обеспечить глобальную уникальность.

  • Настроить группу (Группа)

    Группирует наборы конфигурации, чтобы различать наборы конфигурации с одинаковым идентификатором данных. По умолчанию DEFAULT_GROUP. Распространенные сценарии группировки конфигураций. Различные приложения или компоненты используют один и тот же тип конфигурации, например конфигурацию database_url и конфигурацию раздела очереди сообщений.

Запустите управление конфигурацией Nacos

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

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

image-20190623141751675

После успешного сохранения вы можете увидеть созданные записи конфигурации в списке следующим образом:

image-20190623141953948

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

image-20190623142049041
Далее рассмотрим метод интеграции Nacos на основе стека технологий Spring.

Nacos Spring

  1. Сначала добавьте зависимости в программу Spring

    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-spring-context</artifactId>
        <version>0.2.3-RC1</version>
    </dependency>
    

    Последнюю версию можно найти в репозитории maven.mvnrepository.comполучено в.

  2. Добавить к@EnableNacosConfigАннотация включает службу управления конфигурацией Nacos Spring. В следующем примере мы используем@NacosPropertySourceАннотация загружает набор конфигураций, который мы создали ранее, и указывает на автоматическое обновление конфигурации.

  3. Накос@NacosValueАннотации связывают элементы конфигурации со свойствами.

  1. После запуска программы откройтеhttp://localhost:8080/config/helloполучить результат возвратаhello,test, следующее содержимое указывает на то, что конфигурация чтения прошла успешно.

  2. После успешного чтения мы попытаемся изменить этот элемент конфигурации, чтобы проверить функцию динамического обновления информации о конфигурации Nacos. Существует два способа изменения: один — изменить вручную на консоли Nacos, другой — изменить непосредственно в командной строке с помощью предоставленного API:

    curl -X POST "http://127.0.0.1:8848/nacos/v1.0.1/cs/configs?dataId=com.one.learn.nacos.config&group=DEFAULT_GROUP&content=message=nacos-spring"
    
  3. посетить сноваhttp://localhost:8080/config/hello, возвращаемый контентhello,nacos-spring, вернуть информацию в программу описания измененийmessageЗначение было динамически обновлено.

Nacos Spring Boot

  1. Добавьте зависимости для динамических изменений конфигурации:

    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-config-spring-boot-starter</artifactId>
        <version>0.2.1</version>
    </dependency>
    

    Уведомление: версия здесь0.2.x.RELEASEСоответствует версии Spring Boot 2.x, версии0.1.x.RELEASEСоответствующая версия — Spring Boot 1.x.

  2. существуетapplication.propertiesНастройте адрес сервера Nacos в:

nacos.config.server-addr=127.0.0.1:8848
  1. использовать@NacosPropertySourceнагрузкаdataIdзаcom.one.learn.nacos.configconfig и включите автоматические обновления:

  2. Накос@NacosValueАннотация устанавливает значение свойства, которое совпадает с этапами интеграции Spring.

  3. Запустите класс начальной загрузки, откройтеhttp://localhost:8080/config/helloполучить результат возвратаhello,nacos, что означает, что конфигурация в программе была успешно прочитана.

Nacos Spring Cloud

Если вы используете программу Spring Cloud, Nacos предоставляет библиотеку зависимостейspring-cloud-starter-alibaba-nacos-configВнедрить динамические изменения в конфигурации.

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

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>0.9.0.RELEASE</version>
    </dependency>
    

    Уведомление:Версия0.2.x.RELEASEСоответствует версии Spring Boot 2.x, версии0.1.x.RELEASEСоответствующая версия — Spring Boot 1.x.

  2. существуетbootstrap.propertiesАдрес и имя приложения сервера Nacos, настроенного в Nacos, следующие: в Nacos Spring Cloud:dataIdПо умолчаниюspring.application.nameплюсpropertiesсуффикс файла, поэтому, чтобы правильно прочитать конфигурацию, нам нужно установить идентификатор набора конфигурации на Nacos какcom.one.learn.nacos.configнастроить наcom.one.learn.nacos.config.properties

    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    spring.application.name=com.one.learn.nacos.config
    

    Здесь bootstrap.properties используется как место для настройки Nacos, поскольку порядок загрузки файлов конфигурации Spring Boot следующий: bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml , вapplicationЭто не вступает в силу, если Nacos настроен в иерархии.

    Примечание. При использовании доменного имени для доступа к Nacosspring.cloud.nacos.config.server-addrСпособ настройки должен быть域名:port. Даже с доменным именем нельзя опустить порт. Например, доменное имя Nacos — abc.com.nacos, а порт прослушивания — 80, тогдаspring.cloud.nacos.config.server-addr=abc.com.nacos:80.

  3. Нативные аннотации через Spring Cloud@RefreshScopeЧтобы реализовать автоматическое обновление конфигурации:

  4. запустить программу, получить доступhttp://localhost:8080/config/hello, возвращаемое содержимоеhello,nacos, это означает, что чтение конфигурации прошло успешно.

  5. Изменить элементы конфигурации в консоли Nacosmessage=Nacos Spring Cloud, посетить сноваhttp://localhost:8080/config/hello, возвращаемое содержимоеhello,Nacos Spring Cloud, что указывает на то, что программаmessageЗначение было динамически обновлено.

Управление конфигурацией Nacos в нескольких средах

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

Предположим, наша программа имеет две среды: тестовую и производственную среды, которыми необходимо управлять и настраивать.В программах Spring Boot файл конфигурации по умолчанию — application.properties.Традиционным способом является использование функции Spring Profile для хранения нескольких сред в проекте. , файл конфигурации, формат файлаapplication-${env}-properties, и нужно использоватьspring.profile.activeУказывает, какую конфигурацию среды следует применять при запуске.

Nacos Config в основном использует dataId и группу для однозначного определения конфигурации.dataIdПолный формат выглядит следующим образом:

 ${prefix}-${spring.profile.active}.${file-extension}
  • prefixПо умолчаниюspring.application.nameЗначение также можно передать через элемент конфигурацииspring.cloud.nacos.config.prefixнастроить.

  • spring.profile.activeЭто профиль, соответствующий текущей среде.Документация по весенней загрузке.

    Примечание. Когда spring.profile.active пуст, соответствующий коннектор также не будет существовать, а формат объединения dataId станет {prefix}.{file-extension}

  • file-exetensionЧтобы настроить формат данных контента, вы можете передать элемент конфигурацииspring.cloud.nacos.config.file-extensionнастроить. В настоящее время поддерживается толькоpropertiesиyamlтип.

группа по умолчаниюDEFAULT_GROUP, в состоянии пройтиspring.cloud.nacos.config.groupНастройте указанное имя.

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

image-20190623171248544

Оба хранят два элемента конфигурации вpropertyхранение форматов файлов.

#nacos-config-prod.properties
server.port=8091
message=nacos-config-prod

#nacos-config-test.properties
server.port=8081
message=nacos-config-test
  1. Затем в основном конфигурационном файле программыapplication.propertiesКонфигурация выглядит следующим образом:
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=nacos-config
spring.cloud.nacos.config.file-extension=properties
spring.profile.active=test
  1. Напишите класс контроллера тестирования ConfigController для привязки элементов конфигурации к значениям свойств.

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

    Доступ через браузерhttp://localhost:8081/config/hello,возвращениеhello,nacos-config-test.

  3. Изменить файл конфигурацииapplication.propertiesизspring.profile.active, перезапустите программу и получите доступhttp://localhost:8091/config/hello

    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    spring.application.name=nacos-config
    spring.cloud.nacos.config.file-extension=properties
    spring.profile.active=prod
    

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

Настроить мониторинг

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

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

Конечно@NacosConfigListenerТакже поддерживается преобразование типов, например преобразование в объект свойств.

Рекомендации по пространству имен

В Nacos пространство имен существует как подразделение детализации арендаторов, в основном для обработки данных в нескольких средах и с несколькими арендаторами (настройка и обслуживание) проблема изоляции.

  • Если есть только один арендатор (пользователь), разные пространства имен могут соответствовать разным средам, чтобы реализовать изоляцию конфигурации среды.Эффект аналогичен содержимому предыдущего раздела: Управление конфигурацией Nacos в нескольких средах.

    img

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

    img

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

После краткого введения давайте рассмотрим лучшие практики, связанные с пространствами имен:

  • Как получить значение namespace.
  • метод инициализации параметра пространства имен.

Создать пространство имен

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

image-20190623180238812

Ассоциативное командное пространство

без явного указания${spring.cloud.nacos.config.namespace}В случае конфигурации по умолчанию используется общедоступная папка имен на Nacos. Если вам нужно использовать собственное пространство имен, вы можете сделать это со следующей конфигурацией:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

Эта конфигурация должна быть помещена в файл bootstrap.properties. такжеspring.cloud.nacos.config.namespaceЗначением является идентификатор, соответствующий пространству имен.

Эпилог

На этом знакомство с конфигурацией управления Nacos подходит к концу.Конечно, в управлении конфигурациями есть и другие способы использования.Официальная документация Nacos подробно описывает это, и вы также можете ознакомиться с ним на официальном сайте. В дальнейшем я продолжу углубленное изучение других компонентов экосистемы микросервисов Spring Cloud Alibaba.Заинтересованные партнеры могут подписаться на мой публичный аккаунт WeChat, который будет обновляться каждый понедельник.

公众号

пример кода

Пример проекта:nacos-actions:GitHub.com/ Как будто впервые увидел 12138…

Экологическая поддержка:

  • JDK 8
  • Maven 3.6.0
  • SpringBoot 2.1.0.RELEASE
  • SpringCloud Greenwich.RELEASE
  • SpringCloudAlibaba 0.9.0.RELEASE

Ссылаться на