@LoadBalanced
は、Restテンプレートがリボンを使用したクライアント側の負荷分散に基づいていることを示し、Eurekaサーバーをチェックしてサービス名をホスト/ポートに解決することを示しています。
@RibbonClient
の使用法は何ですか。 Eurekaを使用せずにネイティブのリボンクライアントLBをサポートし、DiscoveryEnabledNIWSServerList
で構成された場合にEureka Discoverもサポートするのですか?
TL; DR:@LoadBalanced
はマーカー注釈であり、@RibbonClient
は設定目的で使用されます。
@LoadBalanced
注釈付きRestTemplate
がサービスと対話するためにRibbonLoadBalancerClient
を使用する必要があることを示すマーカー注釈として使用されます。
これにより、RestTemplate
に渡すURLに「論理識別子」を使用できます。これらの論理識別子は通常、サービスの名前です。例えば:
restTemplate.getForObject("http://some-service-name/user/{id}", String.class, 1);
ここで、some-service-name
は論理識別子です。
@RibbonClient
リボンクライアントの構成に使用されます。
@ RibbonClientが必要ですか?
いや! Service Discoveryを使用していて、デフォルトのすべてのリボン設定で問題なければ、@RibbonClient
アノテーションを使用する必要さえありません。
いつ@RibbonClient
?を使用すべきか
@RibbonClient
を使用する必要がある場合が少なくとも2つあります
リボン設定のカスタマイズ:
@RibbonClient
を定義します
@RibbonClient(name = "some-service", configuration = SomeServiceConfig.class)
name
-リボンで呼び出しているサービスと同じ名前に設定しますが、リボンがそのサービスとやり取りする方法をさらにカスタマイズする必要があります。configuration
-すべてのカスタマイズを@Configuration
として定義した@Beans
クラスに設定します。このクラスではないが@ComponentScan
によって選択されていることを確認してください。そうでない場合、すべてのリボンクライアントのデフォルトがオーバーライドされます。Spring Cloud Netflixドキュメントの「RibbonClientのカスタマイズ」セクションを参照してください (link)
サービス検出なしでリボンを使用する
Service Discoveryを使用していない場合は、@RibbonClient
アノテーションのname
フィールドを使用して、application.properties
の構成のプレフィックスと、URLの「論理識別子」を使用します。 RestTemplate
に渡します。
@RibbonClient
を定義します
@RibbonClient(name = "myservice")
その後、application.properties
myservice.ribbon.eureka.enabled=false
myservice.ribbon.listOfServers=http://localhost:5000, http://localhost:5001
RestTemplate
は負荷分散をサポートします。@LoadBalanced
を使用すると、Spring Cloudに負荷分散サポートを利用したいことを伝えます(リボンを使用している場合、@ LoadBalancedを使用するとRestTemplateはRibbionClientを使用しますサーバーのアドレスを取得します)。
LoadBalancerAutoConfigurationの動作を確認することもできます here
@ RibbonClients を使用すると、リボンクライアントに宣言的な構成を提供できます。
例えば。
@SpringBootApplication
@RestController
@RibbonClient(name = "app", configuration = RibbonConfig.class)
public class App {
@LoadBalanced
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
//...
}
次に、RibbonConfig.class
を作成して、リボン関連のBeanをオーバーライドします。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.IPing;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.PingUrl;
import com.netflix.loadbalancer.AvailabilityFilteringRule;
public class RibbonConfig {
@Autowired
IClientConfig ribbonClientConfig;
@Bean
public IPing ribbonPing (IClientConfig config) {
return new PingUrl();//we override default Iping which is a NoOpPing
}
@Bean
public IRule ribbonRule(IClientConfig config) {
return new AvailabilityFilteringRule(); // we override the default ZoneAvoidanceRule
}
}