Введение в Netflix Archaius с помощью Spring Cloud

Введение в Netflix Archaius с помощью Spring Cloud

1. обзор

NetflixArchaius - мощная библиотека управления конфигурацией.

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

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

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

2. Netflix Archaius Особенности

Как мы знаем, Spring Boot уже предоставляет инструменты для управленияexternalized configurations, так зачем вообще настраивать другой механизм?

Что ж,Archaius offers some handy and interesting features that aren’t contemplated by any other configuration framework. Некоторые из его ключевых моментов:

  • Динамические и типизированные свойства

  • Механизм обратного вызова, который вызывается при мутациях свойств

  • Готовые к использованию реализации динамических источников конфигурации, таких как URL, JDBC и Amazon DynamoDB

  • JMX MBean, к которому можно получить доступ с помощью Spring Boot Actuator или JConsole для проверки и управления свойствами

  • Проверка динамических свойств

Эти льготы могут быть полезны во многих сценариях.

Поэтому Spring Cloud работает над библиотекой, которая позволяет легко настроить «Spring Environment Bridge», чтобы Archaius мог читать свойства из Spring Environment.

3. зависимости

Давайте добавимspring-cloud-starter-netflix-archaius to к нашему приложению, оно добавит все необходимые зависимости в наш проект.

При желании мы также можем добавитьspring-cloud-netflix к нашему разделуdependencyManagement и полагаться на его спецификацию версий артефактов:


    
        org.springframework.cloud
        spring-cloud-starter-netflix-archaius
    



    
        
            org.springframework.cloud
            spring-cloud-netflix
            2.0.1.RELEASE
            pom
            import
        
    

Примечание. Мы можем проверить Maven Central, чтобы убедиться, что мы используем последнюю версиюstarter library.

4. использование

Once we add the required dependency, we’ll be able to access the properties managed by the framework:

DynamicStringProperty dynamicProperty
  = DynamicPropertyFactory.getInstance()
  .getStringProperty("example.archaius.property", "default value");

String propertyCurrentValue = dynamicProperty.get();

Давайте поработаем на небольшом примере, чтобы увидеть, как это доступно прямо из коробки.

4.1. Быстрый пример

By default, it manages dynamically all the properties defined in a file named config.properties in the application’s classpath.

Итак, давайте добавим его в нашу папку ресурсов с некоторыми произвольными свойствами:

#config.properties
example.archaius.properties.one=one FROM:config.properties

Теперь нам понадобится способ проверить значения свойств в любой конкретный момент. В этом случае мы создадимRestController, который извлекает значения в виде ответа JSON:

@RestController
public class ConfigPropertiesController {

    private DynamicStringProperty propertyOneWithDynamic
      = DynamicPropertyFactory.getInstance()
      .getStringProperty("example.archaius.properties.one", "not found!");

    @GetMapping("/property-from-dynamic-management")
    public String getPropertyValue() {
    return propertyOneWithDynamic.getName() + ": " + propertyOneWithDynamic.get();
    }
}

Давай попробуем. Мы можем отправить запрос в эту конечную точку, и служба извлечет значения, хранящиеся вconfig.properties , как ожидалось.

Ничего страшного, правда? Хорошо, давайте продолжим и изменим значения свойства в файле пути к классам, не перезапуская службу. В результате примерно через минуту вызов конечной точки должен получить новые значения. Довольно круто, не правда ли?

Далее мы попытаемся понять, что происходит под капотом.

5. Как это работает?

Прежде всего, давайте попытаемся понять общую картину.

Archaius - это расширениеApache’s Commons Configuration library, добавляющее некоторые полезные функции, такие как структура опроса для динамических источников, с высокой пропускной способностью и потокобезопасной реализацией.

Затем в игру вступает библиотекаspring-cloud-netflix-archaius, которая объединяет все различные источники свойств и автоматически настраивает инструменты Archaius с этими источниками.

5.1. Библиотека Netflix Archaius

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

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

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

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

5.2. Поддержка Spring Cloud

Основная задача библиотеки Spring Cloud Archaius - объединить все различные источники конфигурации какConcurrentCompositeConfiguration и установить их с помощьюConfigurationManager.

Порядок приоритета, в котором библиотека определяет источники:

  1. Любой компонент общей конфигурации ApacheAbstractConfiguration, определенный в контексте

  2. Все источники, определенные вAutowired SpringConfigurableEnvironment

  3. Исходные файлы Archaius, которые мы видели в примере выше

  4. ИсточникиSystemConfiguration иEnvironmentConfiguration Apache

Еще одна полезная функция, которую предоставляет эта библиотека Spring Cloud, - это определение монитора ActuatorEndpoint to и взаимодействие со свойствами. Его использование выходит за рамки данного руководства.

6. Адаптация и расширение конфигурации Archaius

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

6.1. Archaius Поддерживаемые свойства конфигурации

Если мы хотим, чтобы Archaius учитывал другие файлы конфигурации, подобные файлуconfig.properties, мы можем определить системное свойствоarchaius.configurationSource.additionalUrls.

Значение анализируется в списке URL-адресов, разделенных запятой, поэтому, например, мы можем добавить это системное свойство при запуске приложения:

-Darchaius.configurationSource.additionalUrls=
  "classpath:other-dir/extra.properties,
  file:///home/user/other-extra.properties"

Archaius сначала прочитает файлconfig.properties, а затем остальные в указанном порядке. Из-за этого свойства, определенные в последних файлах, будут иметь приоритет над предыдущими.

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

  • archaius.configurationSource.defaultFileName: имя файла конфигурации по умолчанию в пути к классам

  • archaius.fixedDelayPollingScheduler.initialDelayMills: начальная задержка перед чтением источника конфигурации

  • archaius.fixedDelayPollingScheduler.delayMills: задержка между двумя чтениями источника; значение по умолчанию - 1 минута

6.2. Добавление дополнительных источников конфигурации с помощью Spring

Как мы могли бы добавить другой источник конфигурации для управления описанной структурой? И как мы можем управлять динамическими свойствами с более высоким приоритетом, чем те, которые определены в Spring Environment?

Просматривая то, что мы упомянули в разделе 4.2, мы можем понять, что самые высокие конфигурации в Composite Configuration, определенные Spring, - это bean-компонентыAbstractConfiguration, определенные в контексте.

Таким образом,all we need to do is add an implementation of this Apache’s abstract class to our Spring Context using some of the functionality provided by Archaius, and the Spring’s autoconfiguration will spontaneously add it to the managed configuration properties.

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

@Bean
public AbstractConfiguration addApplicationPropertiesSource() {
    URL configPropertyURL = (new ClassPathResource("other-config.properties")).getURL();
    PolledConfigurationSource source = new URLConfigurationSource(configPropertyURL);
    return new DynamicConfiguration(source, new FixedDelayPollingScheduler());
}

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

7. Заключение

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

Кроме того, мы увидели, как в игру вступает библиотека автоконфигурации Spring Cloud, позволяющая удобно использовать API этой библиотеки.

И снова мы можем найти все примеры, показанные в этом руководстве, и другие в нашемGithub repo.