1、官网:http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign
2、Feign是一个声明性的Web服务客户端。它使编写Web服务客户端变得更容易。它具有可插入的注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。
源码可以参考https://github.com/OpenFeign/feign
3、Spring Cloud增加了对Spring MVC注释的支持,并使用了HttpMessageConverters Spring Web中默认使用的注释。
4、Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端;
说白了Feign就一个声明式的Web服务客户端,使得编写Web服务客户端变的更加容易只需要创建一个接口,然后添加注解即可
5、之前我们使用Ribbon进行负载均衡,功能强大也可以自定义算法
6、直接调用我们的微服务来进行访问
7、但是目前大家都习惯使用面向接口的编程如(WebService,我之前使用的Dao接口上面加的@Mpper注解)这些规范
8、为了让大家更加方便提供了两种方式
一种:使用为服务名字获取调用地址
二种:使用接口+注解,获取调用服务
适应社区广大程序员提出的统一面向接口的方式这样Feign就诞生了
1、Feign在编写客户端更加容易
2、之前使用的Ribbon+RestTemplate,利用RestTemplate对Http请求进行封装,从而形成一套模版化调用的方式
3、但是在实际开发中对服务依赖调用不至一处,通常会被多处调用这样会针对每个微服务自行的封装一些客户端类来包装这些依赖服务的调用
4、所有Feign在这个基础进行又一不得封装,由Feign来完成定义和实现依赖服务接口的定义
5、在Feign的实现下我们只需创建一个接口并使用注解来配置如(到接口的注解@Mapper),而现在是一个微服务接口加个Feign注解即可,即完成对服务提供方接口的绑定,同时也简化了SpringCloudRibbon,自动封装服务调用客户端的开发量。
1、参考chserivcecloud-consumer-dept-80工程创建一个新的工程
1、选中父工程chserivcecloud右击---->new Other--->Maven Module
2、工程名称为chserivcecloud-consumer-dept-feign
3、将80工程中的src/main/java的所有包.类和src/main/resources下的配置文件,复制到feign工程中并把主启动类名修改成feign便于区分
4、删除RibbonRlue的包与类(rlue包/下的所类)
5、复制80工程中的pom.xml的配置到feign的pom.xml中
加上Feign的配置
1、因为使用的接口调用方式,为了满足多处调用,把公用接口放在API的工程中
2、修改API工的pom.xml文件,添加配置
3、添加serivce接口层并创建Dept接口,并在该接口添加注解和方法
4、由于是公共的接口,需要在API工程重新选择当前API的工程--->Run As--->进行Maven Clean(重新生成jar包)----->在进行Maven install(安装)
Maven Clean/Maven install后给其他的模块引用,达到通用的目的。
需要用到部门实体,不用在工程中定义一份,可直接引用本模块就可以了
①、修改DeptController_Consumer方法
1、添加API工程刚新建的DeptClientSerivce接口
2、把feign工程中的DeptController_Consumer的属性/方法都删除重写编写
1、在DeptConsumerFeign_Ch中加上注解
1、启动Eureka集群(7001/7002/7003)->在启动服务集群(8001/8002/8003)->在启动Feign工程本身
http://localhost/consumer/dept/get/2
2、注意:Feign集成了Ribbon,利用Ribbon维护微服务列表,并且通过轮询实现了客户的负载均衡
3、与Ribbon不同的是,Feign值需要使用服务并绑定接口并声明方法,从而简单的实现服务调用
4、Feign是面向接口编程,之前是Ribbon——RestTemplate编程