33

@LoadBalancedRest テンプレートは、リボンを使用したクライアント側の負荷分散に基づく必要があり、サービス名をホスト/ポートに解決するために Eureka サーバーをチェックする必要があることを理解しています。

の用途は何ですか@RibbonClient。Eureka なしでネイティブのリボン クライアント LB をサポートし、構成時に Eureka Discover もサポートしDiscoveryEnabledNIWSServerListますか?

4

2 に答える 2

65

TL;DR :@LoadBalancedマーカー注釈であり@RibbonClient、構成目的で使用されます。


@LoadBalanced

注釈付きがサービスと対話するためにRestTemplateを使用する必要があることを示すマーカー 注釈として使用されます。RibbonLoadBalancerClient

これにより、 に渡す URL に「論理識別子」を使用できるようになりますRestTemplate。これらの論理識別子は通常、サービスの名前です。例えば:

restTemplate.getForObject("http://some-service-name/user/{id}", String.class, 1);

ここsome-service-nameで、論理識別子です。

@RibbonClient

リボン クライアントの構成に使用されます。

@RibbonClient は必須ですか?

いいえ!Service Discovery を使用していて、すべての既定のリボン設定に問題がない場合は、@RibbonClient注釈を使用する必要さえありません。

いつ使用する必要があります@RibbonClientか?

使用する必要があるケースが少なくとも 2 つあります。@RibbonClient

  1. 特定のリボン クライアントのリボン設定をカスタマイズする必要があります。
  2. サービス検出を使用していません

リボン設定のカスタマイズ:

定義する@RibbonClient

@RibbonClient(name = "some-service", configuration = SomeServiceConfig.class)
  • name- リボンで呼び出しているサービスと同じ名前に設定しますが、リボンがそのサービスと対話する方法について追加のカスタマイズが必要です。
  • configuration-@Configurationすべてのカスタマイズが として定義されたクラスに設定します@Beans。このクラス選択されていないことを確認してください。@ComponentScanそうしないと、すべてのリボン クライアントの既定値が上書きされます。

Spring Cloud Netflix ドキュメント(リンク)のセクション「RibbonClient のカスタマイズ」を参照してください。

Service Discovery なしでリボンを使用する

Service Discovery を使用していない場合、アノテーションのnameフィールドは、に渡す URL の「論理識別子」と同様に、構成のプレフィックスとして使用されます。@RibbonClientapplication.propertiesRestTemplate

定義する@RibbonClient

@RibbonClient(name = "myservice")

それからあなたのapplication.properties

myservice.ribbon.eureka.enabled=false
myservice.ribbon.listOfServers=http://localhost:5000, http://localhost:5001
于 2017-03-25T22:33:42.613 に答える