Spring CloudによるNetflix Archaiusの紹介

Spring Cloudを使用したNetflix Archaiusの概要

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などの動的構成ソースの実装をすぐに使用可能

  • Spring Boot ActuatorまたはJConsoleがアクセスしてプロパティを検査および操作できるJMX MBean

  • 動的プロパティ検証

これらの特典は、多くのシナリオで有益です。

そのため、Spring Cloudは、ArchaiusがSpring Environmentからプロパティを読み取ることができるように、「Spring Environment Bridge」を簡単に設定できるライブラリを開発しました。

3. 依存関係

spring-cloud-starter-netflix-archaius をアプリケーションに追加しましょう。必要なすべての依存関係がプロジェクトに追加されます.

オプションで、spring-cloud-netflixdependencyManagement セクションに追加し、アーティファクトのバージョンの仕様に依存することもできます。


    
        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

次に、特定の時点でプロパティの値を確認する方法が必要になります。 この場合、値をJSON応答として取得するRestControllerを作成します。

@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 に格納されている値を期待どおりに取得します。

今のところ大したことはないでしょう? では、サービスを再起動せずに、クラスパスファイルのプロパティの値を変更してみましょう。 その結果、1分ほど後に、エンドポイントへの呼び出しで新しい値を取得する必要があります。 かなりかっこいいですね。

次に、内部で何が起こっているのかを理解しようとします。

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. コンテキストで定義されたApacheCommon ConfigurationAbstractConfiguration Bean

  2. Autowired SpringConfigurableEnvironmentで定義されているすべてのソース

  3. 上記の例で見たデフォルトのArchaiusソース

  4. ApacheのSystemConfigurationおよびEnvironmentConfigurationソース

このSpringCloudライブラリが提供するもう1つの便利な機能は、プロパティを監視および操作するためのアクチュエータEndpoint の定義です。 その使用法はこのチュートリアルの範囲外です。

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:ソースの2つの読み取りの間の遅延。デフォルト値は1分です。

6.2. Springで追加の構成ソースを追加する

説明したフレームワークで管理する別の構成ソースを追加するにはどうすればよいですか? また、Spring Environmentで定義されているプロパティよりも高い優先度で動的プロパティを管理するにはどうすればよいでしょうか?

セクション4.2で説明したことを確認すると、Springによって定義された複合構成で最も高い構成は、コンテキストで定義されたAbstractConfigurationBeanであることがわかります。

したがって、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と、構成管理を活用するためにArchaiusが提供するいくつかの優れた機能について学習しました。

また、Spring Cloud自動構成ライブラリがどのように機能し、このライブラリのAPIを便利に使用できるかを確認しました。

もう一度、このチュートリアルに示されているすべての例と他の例をGithub repoに見つけることができます。