Spring Cloud LoadBalancer とは何ですか?

Spring Cloud LoadBalancer とは

Spring Cloud LoadBalancer は、Spring Cloud 自体によって提供される公式のクライアント ロード バランサーであり、Ribbon の代わりに使用されます。

Spring は公式に 2 つの負荷分散クライアントを提供しています。

残りのテンプレート

RestTemplate は、Rest サービスにアクセスするために Spring によって提供されるクライアントであり、リモートの Http サービスにアクセスするためのさまざまな便利なメソッドを提供し、クライアントの書き込み効率を大幅に向上させることができます。デフォルトでは、RestTemplate は jdk の HTTP 接続ツールに依存します。

ウェブクライアント

WebClient は、Spring WebFlux 5.0 以降で提供されている Http リクエストのリアクティブ プログラミングに基づくノンブロッキング クライアント ツールです。リアクティブ プログラミング用の Reactor ベースです。WebClient は、標準の Http リクエスト メソッドに対応する get、post、put、delete などのメソッドを提供しており、これらのメソッドを使用して、対応するリクエストを開始できます。

RestTemplate 統合LoadBalancer

依存関係を導入する

<!-- LoadBalancer -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

<!-- 提供了RestTemplate支持 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- nacos服务注册与发现  移除ribbon支持-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>

注: リボンは nacos-discovery で導入されています。リボン パッケージを削除する必要がある場合は、リボンを使用しないように yml で設定することもできます。

yml設定

spring:
  application:
    name: mall-user-loadbalancer-demo
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    # 不使用ribbon
    loadbalancer:
      ribbon:
        enabled: false

原則: デフォルトでは、RibbonLoadBalancerClient と BlockingLoadBalancerClient の両方がある場合、下位互換性を維持するために、RibbonLoadBalancerClient が使用されます。これをオーバーライドするには、spring.cloud.loadbalancer.ribbon.enabled プロパティを false に設定します。

ここに画像の説明を挿入
@LoadBalanced アノテーションを使用して RestTemplate を構成する

@Configuration
public class RestConfig {
    
    
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
    
    
        return new RestTemplate();
    }
}

通常の通話

	// url = http://user-service/getUserId
  Result result = restTemplate.getForObject(url,Result.class);

WebClient は LoadBalancer を統合します

<!-- LoadBalancer -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

<!-- webflux -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

<!-- nacos服务注册与发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>

WebClient をロード バランサーのクライアントとして構成する

@Configuration
public class WebClientConfig {
    
    

    @LoadBalanced
    @Bean
    WebClient.Builder webClientBuilder() {
    
    
        return WebClient.builder();
    }
    
    @Bean
    WebClient webClient() {
    
    
      return webClientBuilder().build();
    }
}

通常の通話

 // url = http://user-service/getUserId
    //基于WebClient
    Mono<Result> result = webClient.get().uri(url)
            .retrieve().bodyToMono(Result.class);

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_42600094/article/details/130676670