本篇文章給大家分享的是有關(guān)如何使用RestTemplate和WebClient以及Feign,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)服務(wù)項目包括夏津網(wǎng)站建設(shè)、夏津網(wǎng)站制作、夏津網(wǎng)頁制作以及夏津網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,夏津網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到夏津省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
十載的甘德網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整甘德建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“甘德網(wǎng)站設(shè)計”,“甘德網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
我們已經(jīng)學(xué)會如何使用Nacos來實現(xiàn)服務(wù)的注冊與發(fā)現(xiàn),同時也介紹如何通過LoadBalancerClient接口來獲取某個服務(wù)的具體實例,并根據(jù)實例信息來發(fā)起服務(wù)接口消費(fèi)請求。但是這樣的做法需要我們手工的去編寫服務(wù)選取、鏈接拼接等繁瑣的工作,對于開發(fā)人員來說非常的不友好。所以接下來,我們再來看看除此之外,還支持哪些其他的服務(wù)消費(fèi)方式。
在之前的例子中,已經(jīng)使用過RestTemplate
來向服務(wù)的某個具體實例發(fā)起HTTP請求,但是具體的請求路徑是通過拼接完成的,對于開發(fā)體驗并不好。但是,實際上,在Spring Cloud中對RestTemplate做了增強(qiá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 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
注解,而在真正調(diào)用服務(wù)接口的時候,原來host部分是通過手工拼接ip和端口的,直接采用服務(wù)名的時候來寫請求路徑即可。在真正調(diào)用的時候,Spring Cloud會將請求攔截下來,然后通過負(fù)載均衡器選出節(jié)點(diǎn),并替換服務(wù)名部分為具體的ip和端口,從而實現(xiàn)基于服務(wù)名的負(fù)載均衡調(diào)用。
WebClient是Spring 5中最新引入的,可以將其理解為reactive版的RestTemplate。下面舉個具體的例子,它將實現(xiàn)與上面RestTemplate一樣的請求調(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<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時一樣的。關(guān)于WebClient的完整例子也可以通過在文末的倉庫中查看。
上面介紹的RestTemplate和WebClient都是Spring自己封裝的工具,下面介紹一個Netflix OSS中的成員,通過它可以更方便的定義和使用服務(wù)消費(fèi)客戶端。下面也舉一個具體的例子,其實現(xiàn)內(nèi)容與上面兩種方式結(jié)果一致:
第一步:在pom.xml
中增加openfeign的依賴:
@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); } }
這里主要先通過@EnableFeignClients
注解開啟掃描Spring Cloud Feign客戶端的功能;然后又創(chuàng)建一個Feign的客戶端接口定義。使用@FeignClient
注解來指定這個接口所要調(diào)用的服務(wù)名稱,接口中定義的各個函數(shù)使用Spring MVC的注解就可以來綁定服務(wù)提供方的REST接口,比如下面就是綁定alibaba-nacos-discovery-server
服務(wù)的/hello
接口的例子。最后,在Controller中,注入了Client接口的實現(xiàn),并調(diào)用hello方法來觸發(fā)對服務(wù)提供方的調(diào)用。
如果之前已經(jīng)用過Spring Cloud的讀者,肯定會這樣的感受:不論我用的是RestTempalte
也好、還是用的WebClient
也好,還是用的Feign
也好,似乎跟我用不用Nacos沒啥關(guān)系?我們在之前介紹Eureka和Consul的時候,也都是用同樣的方法來實現(xiàn)服務(wù)調(diào)用的,不是嗎?
確實是這樣,對于Spring Cloud老手來說,就算我們更換了Nacos作為新的服務(wù)注冊中心,其實對于我們應(yīng)用層面的代碼是沒有影響的。那么為什么Spring Cloud可以帶給我們這樣的完美編碼體驗?zāi)??實際上,這完全歸功于Spring Cloud Common的封裝,由于在服務(wù)注冊與發(fā)現(xiàn)、客戶端負(fù)載均衡等方面都做了很好的抽象,而上層應(yīng)用方面依賴的都是這些抽象接口,而非針對某個具體中間件的實現(xiàn)。所以,在Spring Cloud中,我們可以很方便的去切換服務(wù)治理方面的中間件。
以上就是如何使用RestTemplate和WebClient以及Feign,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文標(biāo)題:如何使用RestTemplate和WebClient以及Feign
本文URL:http://vcdvsql.cn/article30/iijpso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、網(wǎng)站改版、網(wǎng)站制作、、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)