springcloud-feign实现原理,如何实现负载均衡?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springcloud-feign实现原理,如何实现负载均衡?相关的知识,希望对你有一定的参考价值。

参考技术A 我从不使用feign进行接口调用开始,到使用feign进行接口调用,来说明使用和不使用feign的区别以及如何实现负载均衡的。
不使用Feign的调用
不使用Feign的情况下,进行接口调用,一般都是使用Spring提供的RestTemplate。RestTempate提供了很多调用接口的方法,你可以简单的把RestTemplate理解为是Spring提供的HttpClient。

如果要实现负载均衡,那么只需要加一个LoadBalanced注解,就像下面这样:

那它是怎么实现负载均衡的呢?简单梳理一下源码:

问题
使用RestTemplate有什么问题呢?

我们来看看使用Feign后会变成什么情况。
使用Feign
假设我要调用一个远程接口,获取用户的信息。那么我们可以这么写:

怎么调用呢?

调用方式是不是和普通的接口一样?调用端根本就不必关系UserApiService是一个本地实现,还是一个远程调用。这就解决了上面提到的两个问题。

SpringCloud-Feign

Feign:htt;ps://www.jianshu.com/p/94177e224ef8

Feign是什么?

    Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解.Feign也支持可拔插式的编码器和解码器.Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters.Feign可以与Eureka和Ribbon组合使用以支持负载均衡.

只需要你创建一个接口,然后在上面添加注解即可.

Feign能干什么?

    Feign旨在使编写Java Htpp客户端变得更容易.

    使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模板化的调用方法.但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用.所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义.在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前是Dao接口上标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量

Feign集成了Ribbon

    利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡.而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用
  
  •导入依赖
  
1    <!--feign-->
2         <dependency>
3             <groupId>org.springframework.cloud</groupId>
4             <artifactId>spring-cloud-starter-feign</artifactId>
5             <version>1.4.6.RELEASE</version>
6         </dependency>

  以下内容参考PDF

以上是关于springcloud-feign实现原理,如何实现负载均衡?的主要内容,如果未能解决你的问题,请参考以下文章

springcloud-feign

SpringCloud-Feign

SpringCloud-feign客户端统一处理下游服务自定义异常(1.5.x版本下可以)

微服务SpringCloud-Feign远程调用

SVD原理及代码实现

通信原理工程实训语音信号的线性调制频分复用系统设计