成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Spring Cloud Alibaba基礎(chǔ)教程:支持的幾種服務(wù)消費(fèi)方式

curlyCheng / 1894人閱讀

摘要:那么為什么可以帶給我們這樣的完美編碼體驗(yàn)?zāi)貙?shí)際上,這完全歸功于的封裝,由于在服務(wù)注冊(cè)與發(fā)現(xiàn)客戶(hù)端負(fù)載均衡等方面都做了很好的抽象,而上層應(yīng)用方面依賴(lài)的都是這些抽象接口,而非針對(duì)某個(gè)具體中間件的實(shí)現(xiàn)。

通過(guò)《Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)》一文的學(xué)習(xí),我們已經(jīng)學(xué)會(huì)如何使用Nacos來(lái)實(shí)現(xiàn)服務(wù)的注冊(cè)與發(fā)現(xiàn),同時(shí)也介紹如何通過(guò)LoadBalancerClient接口來(lái)獲取某個(gè)服務(wù)的具體實(shí)例,并根據(jù)實(shí)例信息來(lái)發(fā)起服務(wù)接口消費(fèi)請(qǐng)求。但是這樣的做法需要我們手工的去編寫(xiě)服務(wù)選取、鏈接拼接等繁瑣的工作,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)非常的不友好。所以接下來(lái),我們?cè)賮?lái)看看除此之外,還支持哪些其他的服務(wù)消費(fèi)方式。

使用RestTemplate

在之前的例子中,已經(jīng)使用過(guò)RestTemplate來(lái)向服務(wù)的某個(gè)具體實(shí)例發(fā)起HTTP請(qǐng)求,但是具體的請(qǐng)求路徑是通過(guò)拼接完成的,對(duì)于開(kāi)發(fā)體驗(yàn)并不好。但是,實(shí)際上,在Spring Cloud中對(duì)RestTemplate做了增強(qiáng),只需要稍加配置,就能簡(jiǎn)化之前的調(diào)用方式。

比如:

@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的時(shí)候,增加了@LoadBalanced注解,而在真正調(diào)用服務(wù)接口的時(shí)候,原來(lái)host部分是通過(guò)手工拼接ip和端口的,直接采用服務(wù)名的時(shí)候來(lái)寫(xiě)請(qǐng)求路徑即可。在真正調(diào)用的時(shí)候,Spring Cloud會(huì)將請(qǐng)求攔截下來(lái),然后通過(guò)負(fù)載均衡器選出節(jié)點(diǎn),并替換服務(wù)名部分為具體的ip和端口,從而實(shí)現(xiàn)基于服務(wù)名的負(fù)載均衡調(diào)用。

關(guān)于這種方式,可在文末倉(cāng)庫(kù)查看完整代碼示例。而對(duì)于這種方式的實(shí)現(xiàn)原理,可以參考我之前寫(xiě)的這篇文章的前半部分:Spring Cloud源碼分析(二)Ribbon

使用WebClient

WebClient是Spring 5中最新引入的,可以將其理解為reactive版的RestTemplate。下面舉個(gè)具體的例子,它將實(shí)現(xiàn)與上面RestTemplate一樣的請(qǐng)求調(diào)用:

@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 test() {
            Mono 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的時(shí)候,也增加了@LoadBalanced注解,其原理與之前的RestTemplate時(shí)一樣的。關(guān)于WebClient的完整例子也可以通過(guò)在文末的倉(cāng)庫(kù)中查看。

使用Feign

上面介紹的RestTemplate和WebClient都是Spring自己封裝的工具,下面介紹一個(gè)Netflix OSS中的成員,通過(guò)它可以更方便的定義和使用服務(wù)消費(fèi)客戶(hù)端。下面也舉一個(gè)具體的例子,其實(shí)現(xiàn)內(nèi)容與上面兩種方式結(jié)果一致:

第一步:在pom.xml中增加openfeign的依賴(lài):


    org.springframework.cloud
    spring-cloud-starter-openfeign

第二步:定義Feign客戶(hù)端和使用Feign客戶(hù)端:

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
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")
    interface Client {

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

    }

}

這里主要先通過(guò)@EnableFeignClients注解開(kāi)啟掃描Spring Cloud Feign客戶(hù)端的功能;然后又創(chuàng)建一個(gè)Feign的客戶(hù)端接口定義。使用@FeignClient注解來(lái)指定這個(gè)接口所要調(diào)用的服務(wù)名稱(chēng),接口中定義的各個(gè)函數(shù)使用Spring MVC的注解就可以來(lái)綁定服務(wù)提供方的REST接口,比如下面就是綁定alibaba-nacos-discovery-server服務(wù)的/hello接口的例子。最后,在Controller中,注入了Client接口的實(shí)現(xiàn),并調(diào)用hello方法來(lái)觸發(fā)對(duì)服務(wù)提供方的調(diào)用。關(guān)于使用Feign的完整例子也可以通過(guò)在文末的倉(cāng)庫(kù)中查看。

深入思考

如果之前已經(jīng)用過(guò)Spring Cloud的讀者,肯定會(huì)這樣的感受:不論我用的是RestTempalte也好、還是用的WebClient也好,還是用的Feign也好,似乎跟我用不用Nacos沒(méi)啥關(guān)系?我們?cè)谥敖榻BEureka和Consul的時(shí)候,也都是用同樣的方法來(lái)實(shí)現(xiàn)服務(wù)調(diào)用的,不是嗎?

確實(shí)是這樣,對(duì)于Spring Cloud老手來(lái)說(shuō),就算我們更換了Nacos作為新的服務(wù)注冊(cè)中心,其實(shí)對(duì)于我們應(yīng)用層面的代碼是沒(méi)有影響的。那么為什么Spring Cloud可以帶給我們這樣的完美編碼體驗(yàn)?zāi)???shí)際上,這完全歸功于Spring Cloud Common的封裝,由于在服務(wù)注冊(cè)與發(fā)現(xiàn)、客戶(hù)端負(fù)載均衡等方面都做了很好的抽象,而上層應(yīng)用方面依賴(lài)的都是這些抽象接口,而非針對(duì)某個(gè)具體中間件的實(shí)現(xiàn)。所以,在Spring Cloud中,我們可以很方便的去切換服務(wù)治理方面的中間件。

代碼示例

本文示例讀者可以通過(guò)查看下面?zhèn)}庫(kù):

Github:https://github.com/dyc87112/SpringCloud-Learning/

Gitee:https://gitee.com/didispace/SpringCloud-Learning/

其中,本文的幾種示例可查看下面的幾個(gè)項(xiàng)目:

alibaba-nacos-discovery-server:服務(wù)提供者,必須啟動(dòng)

alibaba-nacos-discovery-client-resttemplate:使用RestTemplate消費(fèi)

alibaba-nacos-discovery-client-webclient:使用WebClient消費(fèi)

alibaba-nacos-discovery-client-feign:使用Feign消費(fèi)

如果您對(duì)這些感興趣,歡迎star、follow、收藏、轉(zhuǎn)發(fā)給予支持!

以下專(zhuān)題教程也許您會(huì)有興趣

Spring Boot基礎(chǔ)教程

Spring Cloud基礎(chǔ)教程

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11962.html

相關(guān)文章

  • Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos作為配置中心

    摘要:通過(guò)本教程的前兩篇基礎(chǔ)教程使用實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)基礎(chǔ)教程支持的幾種服務(wù)消費(fèi)方式我們已經(jīng)學(xué)會(huì)了,如何利用實(shí)現(xiàn)服務(wù)的注冊(cè)與發(fā)現(xiàn)。簡(jiǎn)介除了實(shí)現(xiàn)了服務(wù)的注冊(cè)發(fā)現(xiàn)之外,還將配置中心功能整合在了一起。同時(shí),值必須與上一階段中創(chuàng)建的配置匹配除了或者后綴。 通過(guò)本教程的前兩篇: 《Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)》 《Spring Cloud Ali...

    CHENGKANG 評(píng)論0 收藏0
  • 公益:開(kāi)放一臺(tái)Nacos服務(wù)端給各位Spring Cloud愛(ài)好者

    摘要:之前開(kāi)放過(guò)一臺(tái)公益給大家,以方便大家在閱讀我博客中教程時(shí)候做實(shí)驗(yàn)。由于目前在連載,所以對(duì)應(yīng)的也部署了一臺(tái),并且也開(kāi)放出來(lái),給大家學(xué)習(xí)測(cè)試之用。 之前開(kāi)放過(guò)一臺(tái)公益Eureka Server給大家,以方便大家在閱讀我博客中教程時(shí)候做實(shí)驗(yàn)。由于目前在連載Spring Cloud Alibaba,所以對(duì)應(yīng)的也部署了一臺(tái)Nacos,并且也開(kāi)放出來(lái),給大家學(xué)習(xí)測(cè)試之用。 Nacos控制臺(tái) ...

    jk_v1 評(píng)論0 收藏0
  • Spring Cloud AlibabaSpring Boot、Spring Cloud之間不得不

    摘要:下表整理了目前的版本與版本的兼容關(guān)系還未所以,不論您是在讀我的基礎(chǔ)教程基礎(chǔ)教程還是正在連載的系列教程。 這篇博文是臨時(shí)增加出來(lái)的內(nèi)容,主要是由于最近連載《Spring Cloud Alibaba基礎(chǔ)教程》系列的時(shí)候,碰到讀者咨詢(xún)的大量問(wèn)題中存在一個(gè)比較普遍的問(wèn)題:版本的選擇。其實(shí)這類(lèi)問(wèn)題,在之前寫(xiě)Spring Cloud基礎(chǔ)教程的時(shí)候,就已經(jīng)發(fā)過(guò)一篇《聊聊Spring Cloud版本的...

    feng409 評(píng)論0 收藏0
  • Spring Cloud Alibaba基礎(chǔ)教程:Nacos配置的多環(huán)境管理

    摘要:第二步在應(yīng)用的配置文件中,增加環(huán)境配置第三步啟動(dòng)應(yīng)用,我們可以看到日志中打印了,加載的配置文件使用實(shí)現(xiàn)在中是用來(lái)對(duì)做集合管理的重要概念。深入思考上面我們分別利用配置管理功能中的幾個(gè)不同緯度來(lái)實(shí)現(xiàn)多環(huán)境的配置管理。 前情回顧: 《Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)》 《Spring Cloud Alibaba基礎(chǔ)教程:支持的幾種服務(wù)消費(fèi)方...

    CNZPH 評(píng)論0 收藏0
  • 說(shuō)說(shuō)我為什么看好Spring Cloud Alibaba

    摘要:最近對(duì)基礎(chǔ)教程系列的催更比較多,說(shuō)一下最近的近況因?yàn)榇蛩阋黄鸶?。再次,?duì)于中國(guó)用戶(hù)來(lái)說(shuō),還有一個(gè)非常特殊的意義它將曾經(jīng)紅極一時(shí)的,以及阿里巴巴的強(qiáng)力消息中間件融入體系。 最近對(duì)《Spring Cloud Alibaba基礎(chǔ)教程》系列的催更比較多,說(shuō)一下最近的近況:因?yàn)榇蛩鉙pring Boot 2.x一起更新。所以一直在改博客Spring Boot專(zhuān)題頁(yè)和Git倉(cāng)庫(kù)的組織。由于前端技...

    yhaolpz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<