Einführung in Netflix Archaius mit Spring Cloud

Einführung in Netflix Archaius mit Spring Cloud

1. Überblick

NetflixArchaius ist eine leistungsstarke Konfigurationsverwaltungsbibliothek.

Einfach ausgedrückt handelt es sich um ein Framework, mit dem Konfigurationseigenschaften aus vielen verschiedenen Quellen erfasst werden können, um einen schnellen und threadsicheren Zugriff darauf zu ermöglichen.

Darüber hinaus können Eigenschaften in der Bibliothek zur Laufzeit dynamisch geändert werden, sodass das System diese Variationen abrufen kann, ohne die Anwendung neu starten zu müssen.

In diesem Einführungs-Tutorial richten wir eine einfache Spring Cloud Archaius-Konfiguration ein, erklären, was unter der Haube passiert, und schließlich sehen wir, wie Spring die Erweiterung der Grundeinstellung ermöglicht.

2. Netflix Archaius Funktionen

Wie wir wissen, bietet Spring Boot bereits Instrumente zur Verwaltung vonexternalized configurations. Warum also einen anderen Mechanismus einrichten?

Nun,Archaius offers some handy and interesting features that aren’t contemplated by any other configuration framework. Einige seiner wichtigsten Punkte sind:

  • Dynamische und typisierte Eigenschaften

  • Ein Rückrufmechanismus, der bei Eigenschaftsveränderungen aufgerufen wird

  • Gebrauchsfertige Implementierungen dynamischer Konfigurationsquellen wie URLs, JDBC und Amazon DynamoDB

  • Eine JMX-MBean, auf die Spring Boot Actuator oder JConsole zugreifen können, um die Eigenschaften zu überprüfen und zu bearbeiten

  • Validierung dynamischer Eigenschaften

Diese Vorteile können in vielen Szenarien von Vorteil sein.

Aus diesem Grund hat Spring Cloud an einer Bibliothek gearbeitet, mit der auf einfache Weise eine „Spring Environment Bridge“ konfiguriert werden kann, damit Archaius Eigenschaften aus der Spring Environment lesen kann.

3. Abhängigkeiten

Fügen wir dasspring-cloud-starter-netflix-archaius zu unserer Anwendung hinzu, es werden alle erforderlichen Abhängigkeiten zu unserem Projekt. hinzugefügt

Optional können wir auchspring-cloud-netflix zu unserem AbschnittdependencyManagement hinzufügen und uns auf die Spezifikation der Versionen der Artefakte verlassen:


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



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

Hinweis: Wir können Maven Central überprüfen, um sicherzustellen, dass wir die neueste Version vonstarter libraryverwenden.

4. Verwendungszweck

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();

Lassen Sie uns an einem kurzen Beispiel arbeiten, um zu sehen, wie dies sofort verfügbar ist.

4.1. Schnelles Beispiel

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

Fügen wir es also mit einigen beliebigen Eigenschaften zu unserem Ressourcenordner hinzu:

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

Jetzt brauchen wir eine Möglichkeit, die Werte der Eigenschaften zu einem bestimmten Zeitpunkt zu überprüfen. In diesem Fall erstellen wir einRestController, das die Werte als JSON-Antwort abruft:

@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();
    }
}

Probieren wir es aus. Wir können eine Anfrage an diesen Endpunkt senden, und der Dienst ruft die inconfig.properties gespeicherten Werte ab, wie erwartet.

Bisher keine große Sache, oder? Ok, lassen Sie uns fortfahren und die Werte der Eigenschaft in der Klassenpfaddatei ändern, ohne den Dienst neu zu starten. Infolgedessen sollte ein Aufruf des Endpunkts nach etwa einer Minute die neuen Werte abrufen. Ziemlich cool, oder?

Als nächstes werden wir versuchen zu verstehen, was unter der Haube vor sich geht.

5. Wie funktioniert es?

Versuchen wir zunächst, das Gesamtbild zu verstehen.

Archaius ist eine Erweiterung vonApache’s Commons Configuration library und fügt einige nette Funktionen wie ein Polling-Framework für dynamische Quellen mit hohem Durchsatz und threadsicherer Implementierung hinzu.

Die Bibliothekspring-cloud-netflix-archaiuskommt dann ins Spiel, indem alle verschiedenen Eigenschaftsquellen zusammengeführt und die Archaius-Tools automatisch mit diesen Quellen konfiguriert werden.

5.1. Die Netflix Archaius Bibliothek

Es definiert eine zusammengesetzte Konfiguration, eine Sammlung verschiedener Konfigurationen, die aus verschiedenen Quellen stammen.

Darüber hinaus unterstützen einige dieser Konfigurationsquellen möglicherweise die Abfrage nach Änderungen zur Laufzeit. Archaius bietet Schnittstellen und einige vordefinierte Implementierungen, um diese Arten von Quellen zu konfigurieren.

Die Quellensammlung ist hierarchisiert, sodass, wenn eine Eigenschaft in mehreren Konfigurationen vorhanden ist, der Endwert derjenige im obersten Slot ist.

Schließlich behandelt einConfigurationManager den systemweiten Konfigurations- und Bereitstellungskontext. Es kann die endgültige Composite-Konfiguration installieren oder die installierte zur Änderung abrufen.

5.2. Spring Cloud-Unterstützung

Die Hauptaufgabe der Spring Cloud Archaius-Bibliothek besteht darin, alle verschiedenen Konfigurationsquellen alsConcurrentCompositeConfiguration zusammenzuführen und mitConfigurationManager. zu installieren

Die Rangfolge, in der die Bibliothek die Quellen definiert, lautet:

  1. Jede im Kontext definierte Bean von Apache Common ConfigurationAbstractConfiguration

  2. Alle inAutowired SpringConfigurableEnvironment definierten Quellen

  3. Die Standard-Archaius-Quellen, die wir im obigen Beispiel gesehen haben

  4. Die QuellenSystemConfigurationundEnvironmentConfigurationvon Apache

Eine weitere nützliche Funktion dieser Spring Cloud-Bibliothek ist die Definition eines ActuatorEndpoint to-Monitors und der Interaktion mit den Eigenschaften. Die Verwendung dieses Handbuchs ist nicht Bestandteil dieses Lernprogramms.

6. Anpassen und Erweitern der Archaius-Konfiguration

Nachdem wir nun ein besseres Verständnis für die Funktionsweise von Archaius haben, können wir analysieren, wie die Konfiguration an unsere Anwendung angepasst oder die Funktionalität mithilfe unserer Konfigurationsquellen erweitert werden kann.

6.1. Von Archaius unterstützte Konfigurationseigenschaften

Wenn Archaius andere Konfigurationsdateien berücksichtigen soll, die denen vonconfig.propertiesähnlich sind, können wir die Systemeigenschaft vonarchaius.configurationSource.additionalUrlsdefinieren.

Der Wert wird in eine durch Komma getrennte Liste von URLs geparst, sodass wir beispielsweise diese Systemeigenschaft beim Starten der Anwendung hinzufügen können:

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

Archaius liest zuerst die Dateiconfig.propertiesund dann die anderen in der angegebenen Reihenfolge. Aus diesem Grund haben die in den letzteren Dateien definierten Eigenschaften Vorrang vor den vorherigen.

Es gibt einige andere Systemeigenschaften, mit denen wir verschiedene Aspekte der Archaius-Standardkonfiguration konfigurieren können:

  • archaius.configurationSource.defaultFileName: Der Standardname der Konfigurationsdatei im Klassenpfad

  • archaius.fixedDelayPollingScheduler.initialDelayMills: anfängliche Verzögerung vor dem Lesen der Konfigurationsquelle

  • archaius.fixedDelayPollingScheduler.delayMills: Verzögerung zwischen zwei Lesevorgängen der Quelle; Der Standardwert ist 1 Minute

6.2. Hinzufügen zusätzlicher Konfigurationsquellen mit Spring

Wie können wir eine andere Konfigurationsquelle hinzufügen, die vom beschriebenen Framework verwaltet werden soll? Und wie können wir dynamische Eigenschaften mit höherer Priorität als die in der Spring-Umgebung definierten verwalten?

Wenn wir uns das ansehen, was wir in Abschnitt 4.2 erwähnt haben, können wir feststellen, dass die höchsten Konfigurationen in der von Spring definierten zusammengesetzten Konfiguration die im Kontext definiertenAbstractConfiguration Beans sind.

Somit istall 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.

Zur Vereinfachung sehen wir ein Beispiel, in dem wir eine Eigenschaftendatei konfigurieren, die der Standardeinstellungconfig.propertiesähnelt, jedoch den Unterschied hat, dass sie eine höhere Priorität als die übrigen Eigenschaften der Spring-Umgebung und der Anwendung hat:

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

Glücklicherweise werden mehrere Konfigurationsquellen in Betracht gezogen, die wir fast mühelos einrichten können. Ihre Konfiguration liegt außerhalb des Bereichs dieses Einführungs-Tutorials.

7. Fazit

Zusammenfassend haben wir etwas über Archaius und einige der coolen Funktionen gelernt, die es bietet, um das Konfigurationsmanagement zu nutzen.

Außerdem haben wir gesehen, wie die Spring Cloud-Autokonfigurationsbibliothek ins Spiel kommt, sodass wir die API dieser Bibliothek bequem verwenden können.

Noch einmal, wir können alle Beispiele in diesem Tutorial und andere in unserenGithub repo finden.