最新の安定バージョンについては、Spring Cloud Zookeeper 5.0.2 を使用してください!

Zookeeper の依存関係

次のトピックでは、Spring Cloud Zookeeper 依存関係を操作する方法について説明します。

Zookeeper 依存関係の使用

Spring Cloud Zookeeper を使用すると、アプリケーションの依存関係をプロパティとして提供できます。依存関係として、Zookeeper に登録されており、OpenFeign (REST クライアントビルダー)、RestTemplateSpring Cloud ロードバランサ経由の WebClient を通じて呼び出す他のアプリケーションを理解できます。

Zookeeper 依存関係ウォッチャー機能を使用して、依存関係の状態を制御および監視することもできます。

Zookeeper 依存関係のアクティブ化

org.springframework.cloud:spring-cloud-starter-zookeeper-discovery への依存関係を含めると、Spring Cloud Zookeeper 依存関係をセットアップする自動構成が有効になります。プロパティで依存関係を指定した場合でも、依存関係をオフにすることができます。これを行うには、spring.cloud.zookeeper.dependency.enabled プロパティを false に設定します (デフォルトは true です)。

Zookeeper 依存関係のセットアップ

次の依存関係表現の例を考えてみましょう。

application.yml
spring.application.name: yourServiceName
spring.cloud.zookeeper:
  dependencies:
    newsletter:
      path: /path/where/newsletter/has/registered/in/zookeeper
      loadBalancerType: ROUND_ROBIN
      contentTypeTemplate: application/vnd.newsletter.$version+json
      version: v1
      headers:
        header1:
            - value1
        header2:
            - value2
      required: false
      stubs: org.springframework:foo:stubs
    mailing:
      path: /path/where/mailing/has/registered/in/zookeeper
      loadBalancerType: ROUND_ROBIN
      contentTypeTemplate: application/vnd.mailing.$version+json
      version: v1
      required: true

次のいくつかのセクションでは、依存関係の各部分を 1 つずつ説明します。ルートプロパティ名は spring.cloud.zookeeper.dependencies です。

エイリアス

ルートプロパティでは、各依存関係をエイリアスとして表す必要があります。これは、アプリケーション ID を URL に配置する必要がある Spring Cloud LoadBalancer の制約によるものです。/myApp/myRoute/name などの複雑なパスを渡すことはできません。別名は、DiscoveryClientFeign、または RestTemplate の serviceId の代わりに使用する名前です。

前の例では、エイリアスは newsletter および mailing です。次の例は、newsletter エイリアスを使用した Feign の使用箇所を示しています。

@FeignClient("newsletter")
public interface NewsletterService {
        @RequestMapping(method = RequestMethod.GET, value = "/newsletter")
        String getNewsletters();
}

パス

パスは path YAML プロパティによって表され、依存関係が Zookeeper に登録されるパスです。前のセクションで説明したように、Spring Cloud LoadBalancer は URL に対して動作します。結果として、このパスは要件を満たしていません。そのため、Spring Cloud Zookeeper はエイリアスを適切なパスにマップします。

ロードバランサの種類

ロードバランサーの型は、loadBalancerType YAML プロパティによって表されます。

この特定の依存関係を呼び出すときにどのような負荷分散戦略を適用する必要があるかがわかっている場合は、それを YAML ファイルで指定すると、自動的に適用されます。次の負荷分散戦略のいずれかを選択できます。

  • STICKY: 選択すると、インスタンスは常に呼び出されます。

  • RANDOM: インスタンスをランダムに選択します。

  • ROUND_ROBIN: インスタンスを何度も繰り返します。

Content-Type テンプレートとバージョン

Content-Type テンプレートとバージョンは、contentTypeTemplate および version YAML プロパティによって表されます。

Content-Type ヘッダーで API のバージョンを設定する場合、このヘッダーを各リクエストに追加する必要はありません。また、新しいバージョンの API を呼び出したい場合、コードを歩き回って API バージョンを上げる必要はありません。このため、contentTypeTemplate に特別な $version プレースホルダーを提供できます。そのプレースホルダーには、version YAML プロパティの値が入力されます。次の contentTypeTemplate の例を考えてみましょう。

application/vnd.newsletter.$version+json

さらに次の version について考えてみましょう。

v1

contentTypeTemplate とバージョンを組み合わせると、次のように各リクエストの Content-Type ヘッダーが作成されます。

application/vnd.newsletter.v1+json

デフォルトのヘッダー

デフォルトのヘッダーは、YAML の headers マップで表されます。

場合によっては、依存関係への呼び出しごとに、いくつかのデフォルトヘッダーの設定が必要になることがあります。コードでこれを行わないようにするには、次の headers セクションの例に示すように、YAML ファイルで設定できます。

headers:
    Accept:
        - text/html
        - application/xhtml+xml
    Cache-Control:
        - no-cache

この headers セクションにより、HTTP リクエストに適切な値のリストを含む Accept ヘッダーと Cache-Control ヘッダーが追加されます。

必要な依存関係

必要な依存関係は、YAML の required プロパティによって表されます。

アプリケーションの起動時に依存関係の 1 つが起動している必要がある場合は、YAML ファイルで required: true プロパティを設定できます。

アプリケーションが起動時に必要な依存関係をローカライズできない場合、例外がスローされ、Spring コンテキストのセットアップに失敗します。つまり、必要な依存関係が Zookeeper に登録されていない場合、アプリケーションは起動できません。

Spring Cloud Zookeeper プレゼンスチェッカーの詳細については、このドキュメントで後ほど説明します。

スタブ

次の例に示すように、依存関係のスタブを含む JAR へのパスをコロンで区切って指定できます。

stubs: org.springframework:myApp:stubs

内容:

  • org.springframework は groupId です。

  • myApp は artifactId です。

  • stubs は分類子です。(stubs がデフォルト値であることに注意してください。)

stubs がデフォルトの分類子であるため、前の例は次の例と同じです。

stubs: org.springframework:myApp

Spring Cloud Zookeeper 依存関係の構成

次のプロパティを設定して、Zookeeper 依存関係機能の一部を有効または無効にすることができます。

  • spring.cloud.zookeeper.dependencies: このプロパティを設定しない場合は、Zookeeper 依存関係を使用できません。

  • spring.cloud.zookeeper.dependency.loadbalancer.enabled (デフォルトで有効になっています): ZookeeperServiceInstanceListSupplier および依存関係に基づいて負荷分散された RestTemplate セットアップを含む、Zookeeper 固有のカスタム負荷分散戦略を有効にします。

  • spring.cloud.zookeeper.dependency.headers.enabled (デフォルトで有効になっています): このプロパティは、依存関係構成で示されているように、適切なヘッダーとコンテンツ型をそのバージョンとともに自動的に追加する FeignBlockingLoadBalancerClient を登録します。この設定がないと、これら 2 つのパラメーターは機能しません。

  • spring.cloud.zookeeper.dependency.resttemplate.enabled (デフォルトで有効になっています): 有効にすると、このプロパティは、依存関係構成で設定されたバージョンでヘッダーとコンテンツ型を渡すように、@LoadBalanced アノテーション付き RestTemplate のリクエストヘッダーを変更します。この設定がないと、これら 2 つのパラメーターは機能しません。