首页 > 互联资讯 > 建站教程  > 

Spring Cloud Alibaba-Feign的源码分析

我们在想为什么我们调用接口StockFeignClient就能调用对应的服务呢? 

StockFeignClient接口代码如下:

@FeignClient(name = "msb-stock")//,configuration = StockFeignConfiguration.class)

public interface StockFeignClient {

    /**

     * http://msb-stock/stock/reduce/{productId}

     * @param productId

     * @return

     */

    @GetMapping("/stock/reduce/{productId}")

    String reduce(@PathVariable Integer productId);

}

StockFeignClient接⼝打个@FeignClient注解,它是怎么通过接⼝上的信息、找到接⼝的实现类的呢?我们看一下StockFeignClient发现⾥⾯就是⼀些SpringMVC相关的注解信息,⽐如接⼝类和⽅法上的@RequestMapping中、标注了具体访问时的路径以及请求⽅法(GET、PUT、POST、DELETE)是怎样的、@PathVariable标注了应该在请求路径上带上什么变量名、@RequestBody表示POST请求要带上的请求参数。

 还有这个@FeignClient中name属性,这些信息一定是构建一个url, 好再@ReqeustMapping中我们知道我们的路径是/stock/reduce/{productId} 并且是一个get请求,

@GetMapping("/stock/reduce/{productId}")

    String reduce(@PathVariable Integer productId);

复制代码

那对应StockFeignClient上的注解@FeignClient注解,可以得到目标服务,也就是本次调用的服务msb-stock

@FeignClient(name = "msb-stock",configuration = StockFeignConfiguration.class)

复制代码

最终根据这些注解信息得到的请求URL信息为:/msb-stock//stock/reduce/12。

⽽⼜因为在SpringCloud体系内,发送⼀次请求都是通过HTTP协议来的,最终我们加上协议后,请求URL为: http://msb-stock//stock/reduce/45465。

分析到这⾥,我们再看下现在还缺什么:http://msb-stock/stock/reduce/45465,这个请求URL中⽬前唯⼀的疑点就在msb-stock上了,总不能就这么尴尬的写个msb-stock来发送请求吧,没有实际的ip和port怕是直接发起请求就报错了,所以肯定是需要将msb-stock解析成具体的ip和port,这样的URL才算是⼀个完整的URL、才能实际的发送有效请求出去。

并且我们是和nacos进行整合的,那么我们需要从nacos中获取所有服务对应的ip和port ,但是我们如果有多个实例那我们是不是需要利用负载均衡器来获取一个我们需要的服务,当然我们feign也整合了ribbon,所以我们底层可以使用ribbon进行负载均衡。


Spring Cloud Alibaba-Feign的源码分析由讯客互联建站教程栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Spring Cloud Alibaba-Feign的源码分析