日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springcloud(七)-Feign声明式REST调用

發(fā)布時(shí)間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springcloud(七)-Feign声明式REST调用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

前面我們使用的RestTemplate實(shí)現(xiàn)REST API調(diào)用,代碼大致如下:

public User findById(@PathVariable Long id) {return restTemplate.getForObject("http://localhost:8084/" + id, User.class);}

由代碼可知,我們是使用拼接字符串的方式構(gòu)造URL的,該URL只有一個(gè)參數(shù)。但是,在現(xiàn)實(shí)中,URL中往往含有多個(gè)參數(shù)。這時(shí)候我們?nèi)绻€用這種方式構(gòu)造URL,那么就會(huì)非常痛苦。舉個(gè)例子:

http://localhost:8010/search?name=zhangsan&username=account1&age=20

這里是有三個(gè)參數(shù),要是有10個(gè)參數(shù),那么代碼會(huì)變得難以維護(hù)。

怎么解決?

Feign簡介

Feign是Netflix開發(fā)的聲明式,模板化的HTTP客戶端,其靈感來自Retrofit,JAXRS-2.0以及WebSocket.Feign可幫助我們更加便捷,優(yōu)雅的調(diào)用HTTP API。

在spring cloud中,使用Feign非常簡單——?jiǎng)?chuàng)建一個(gè)接口,并在接口上添加一些注解,代碼就完成了。Feign支持多種注解,例如Feign自帶的注解或者JAX-RS注解等。

spring cloud對Feign進(jìn)行了增強(qiáng),使Feign支持了springmvc注解,并整合了Ribbon和Eureka,從而讓Feign的使用更加方便。

代碼編寫

1.我們復(fù)制前面的microservice-consumer-movie,將ArtifactId修改為microservice-consumer-movie-feign.

2.添加Feign的依賴。

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

3.創(chuàng)建一個(gè)Feign接口,并添加@FeignClient注解。

@FeignClient("microservice-provider-user") public interface UserFeignClient {@RequestMapping(value="/{id}",method = RequestMethod.GET)public User findById(@PathVariable("id") Long id); }

這里解釋一下:@FeignClient注解中的microservice-provider-user是一個(gè)任意的客戶端名稱,用于創(chuàng)建Ribbon負(fù)載均衡器。在本例中,使用了Eureka,所以Ribbon會(huì)把microservice-provider-user解析成Eureka Server服務(wù)注冊表中的服務(wù)。

當(dāng)然,你也可以使用url屬性指定請求URL(URL可以是完整的URL或者主機(jī)名),例如:

@FeignClient(name="microservice-consumer-user",url="http://localhost:8000/")

4.修改Controller代碼,讓其調(diào)用Feign接口。

@RestController public class MovieController { // @Autowired // private RestTemplate restTemplate; @Autowiredprivate UserFeignClient userFeignClient;@GetMapping("/user/{id}")public User findById(@PathVariable Long id) { // return restTemplate.getForObject("http://localhost:8081/" + id, User.class);return userFeignClient.findById(id);} }

5.修改啟動(dòng)類,為其添加@EnableFeignClients注解,如下:

@SpringBootApplication @EnableFeignClients public class ConsumerMovieApplication {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(ConsumerMovieApplication.class, args);} }

這樣,我們的電影微服務(wù)就可以用Feign去調(diào)用用戶微服務(wù)的API了。

測試

啟動(dòng)microservice-discovery-eureka.

啟動(dòng)2個(gè)或更多microservice-provider-user實(shí)例。

啟動(dòng)microservice-consumer-movie-feign.

多次訪問http://localhost:8082/user/1,返回結(jié)果。

{"id":1,"username":"account1","name":"張三","age":20,"balance":98.23}

兩個(gè)用戶微服務(wù)實(shí)例都會(huì)打印如下日志:

Hibernate: select user0_.id as id1_0_0_, user0_.age as age2_0_0_, user0_.balance as balance3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ from user user0_ where user0_.id=? 2019-04-19 19:23:42.249 TRACE 7464 --- [nio-8084-exec-7] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [1] 2019-04-19 19:23:42.251 TRACE 7464 --- [nio-8084-exec-7] o.h.type.descriptor.sql.BasicExtractor : extracted value ([age2_0_0_] : [INTEGER]) - [20] 2019-04-19 19:23:42.251 TRACE 7464 --- [nio-8084-exec-7] o.h.type.descriptor.sql.BasicExtractor : extracted value ([balance3_0_0_] : [NUMERIC]) - [98.23] 2019-04-19 19:23:42.251 TRACE 7464 --- [nio-8084-exec-7] o.h.type.descriptor.sql.BasicExtractor : extracted value ([name4_0_0_] : [VARCHAR]) - [張三] 2019-04-19 19:23:42.251 TRACE 7464 --- [nio-8084-exec-7] o.h.type.descriptor.sql.BasicExtractor : extracted value ([username5_0_0_] : [VARCHAR]) - [account1]

以上結(jié)果說明,我們不但實(shí)現(xiàn)了聲明式REST API調(diào)用,同時(shí)還實(shí)現(xiàn)了客戶端側(cè)的負(fù)載均衡。


?

代碼下載地址:https://gitee.com/fengyuduke/my_open_resources/blob/master/microservice-consumer-movie-feign.zip

?

轉(zhuǎn)載于:https://www.cnblogs.com/fengyuduke/p/10738342.html

總結(jié)

以上是生活随笔為你收集整理的springcloud(七)-Feign声明式REST调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。