Spring Cloud Alibaba:サポートされるいくつかのサービス消費メソッド(RestTemplate、WebClient、Feign)

概観

Nacosを介して登録済みのサービスを利用する場合、消費者はRestTemplate、WebClient、Feignなどのメソッドを使用できますが、それらの違いは何ですか?

RestTemplateを使用する

RestTemplateは、サービスの特定のインスタンスへのHTTP要求を開始しますが、特定の要求パスはスプライシングによって完了します。これは、開発経験には適していません。ただし、実際には、RestTemplateはSpring Cloudで拡張されており、前の呼び出しメソッドを簡略化するために必要な構成はわずかです。

@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Slf4j
    @RestController
    static class TestController {

        @Autowired
        RestTemplate restTemplate;

        @GetMapping("/test")
        public String test() {
            String result = restTemplate.getForObject("http://alibaba-nacos-discovery-server/hello?name=didi", String.class);
            return "Return : " + result;
        }
    }

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

}

RestTemplateを定義すると、@ LoadBalancedアノテーションが追加され、サービスインターフェイスが実際に呼び出されると、元のホストパーツが手動でスプライスされたIPとポートになり、サービス名を直接使用するとリクエストパスを書き込むことができます。
@ LoadBalanced:はい登録センターを介してサービスプロバイダーのアプリケーション名を取得し、ロードバランサーを介してノードを選択し、サービス名の部分を特定のIPおよびポートに置き換えて、サービス名に基づくロードバランシングコールを実現します。

WebClientを使用する

WebClientはSpring 5の最新の紹介であり、RestTemplateの反応バージョンとして理解できます。以下は、上記のRestTemplateと同じリクエスト呼び出しを実装する特定の例です。

@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Slf4j
    @RestController
    static class TestController {

        @Autowired
        private WebClient.Builder webClientBuilder;

        @GetMapping("/test")
        public Mono<String> test() {
            Mono<String> result = webClientBuilder.build()
                    .get()
                    .uri("http://alibaba-nacos-discovery-server/hello?name=didi")
                    .retrieve()
                    .bodyToMono(String.class);
            return result;
        }
    }

    @Bean
    @LoadBalanced
    public WebClient.Builder loadBalancedWebClientBuilder() {
        return WebClient.builder();
    }

}

定義中に注釈WebClient.Builderが追加され、@LoadBalanced原則は以前のRestTemplateと同じです。

Feignを使用する

最初のステップ:pom.xmlのopenfeignの依存関係を増やします:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

ステップ2:Feignクライアントを定義し、Feignクライアントを使用します。

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients //开启扫描Spring Cloud Feign客户端的功能
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Slf4j
    @RestController
    static class TestController {

        @Autowired
        Client client;

        @GetMapping("/test")
        public String test() {
            String result = client.hello("didi");
            return "Return : " + result;
        }
    }


    @FeignClient("alibaba-nacos-discovery-server") //指定这个接口所要调用的服务名称,接口中定义的各个函数使用Spring MVC的注解就可以来绑定服务提供方的REST接口
    interface Client {

        @GetMapping("/hello")
        String hello(@RequestParam(name = "name") String name);

    }

}

注:文章引用

オリジナルの記事を8件公開 Likes0 Visits 45

おすすめ

転載: blog.csdn.net/weixin_41213402/article/details/105371143