1、Feign是SpringCloud的一个负载均衡组件。

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

  Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,只需要创建一个接口,然后在上面添加注解即可。参考官网:https://github.com/OpenFeign/feign

2、Feign能干什么。

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

3、Feign和Ribbon的关系。

  Feign集成了Ribbon,利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

4、Feign的使用步骤,新建microservicecloud-consumer-dept-feign项目,修改pom.xml配置文件,添加对feign的支持。如下所示:

 <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion>
<parent>
<groupId>com.bie.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.-SNAPSHOT</version>
</parent>
<artifactId>microservicecloud-consumer-dept-feign</artifactId> <dependencies>
<!-- 自己定义的api -->
<dependency>
<groupId>com.bie.springcloud</groupId>
<artifactId>microservicecloud-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 修改后立即生效,热部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- 将微服务consumer客户端注册进eureka -->
<!-- eureka需要依赖如下两个依赖包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- Ribbon相关,需要和eureka进行整合 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<!-- feign相关的jar包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency> </dependencies> </project>

  由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。

  修改microservicecloud-api这个工程,该工程是实体类,工具类,公共方法的抽取和配置。面向接口编程调用微服务,接口里面的东西可以放到该模块下面,方便各个模块对其进行调用。

 <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion>
<!-- 子类里面显示声明才能有明确的继承表现,无意外就是父类的默认版本否则自己定义 -->
<parent>
<groupId>com.bie.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.-SNAPSHOT</version>
</parent>
<!-- 当前Module我自己叫什么名字 -->
<artifactId>microservicecloud-api</artifactId> <!-- 当前Module需要用到的jar包,按自己需求添加,如果父类已经包含了,可以不用写版本号 -->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
</dependencies> </project>

创建接口并新增注解@FeignClient。value的值是微服务提供者的名称,即spring.application.name。

 package com.bie.service;

 import java.util.List;

 import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import com.bie.po.Dept; /**
*
*
* @author biehl
*
*
*/
@FeignClient(value = "MICROSERVICECLOUD-PROVIDER-DEPT")
// value的值是微服务提供者的名称,即spring.application.name。Feign使用用法,创建一个接口,使用一个注解。
public interface DeptClientService { /**
* 查询接口
*
* @param id
* @return
*/
@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
public Dept get(@PathVariable("id") long id); /**
* 查询接口
*
* @return
*/
@RequestMapping(value = "/dept/list", method = RequestMethod.GET)
public List<Dept> list(); /**
* 新增接口
*
* @param dept
* @return
*/
@RequestMapping(value = "/dept/add", method = RequestMethod.POST)
public boolean add(Dept dept);
}

然后将工具模块microservicecloud-api进行maven clear,然后进行maven install。修改microservicecloud-consumer-dept-feign控制层类,如下所示:

 package com.bie.controller;

 import java.util.List;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.bie.po.Dept;
import com.bie.service.DeptClientService; /**
*
* 使用Feign进行负载均衡。
*
* @author biehl
*
*/
@RestController
public class DeptControllerConsumer { @Autowired
private DeptClientService service = null; /**
*
* @param dept
* @return
*/
@RequestMapping(value = "/consumer/dept/add")
public boolean addDept(Dept dept) { return this.service.add(dept);
} /**
* 注意,从路径中获取到参数值,使用注解@PathVariable
*
* @param id
* @return
*/
@RequestMapping(value = "/consumer/dept/get/{id}")
public Dept getById(@PathVariable(value = "id") Long id) { return this.getById(id);
} /**
*
* @return
*/
@RequestMapping(value = "/consumer/dept/list")
public List<Dept> list() { return this.service.list();
} }

修改microservicecloud-consumer-dept-feign主启动类,如下所示:

 package com.bie;

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan; /**
* Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate),
*
* 通过Feign直接找到服务接口,由于在进行服务调用的时候融合了Ribbon技术,
*
* 所以也支持负载均衡作用。
*
* @author biehl
*
*/
@SpringBootApplication
@EnableEurekaClient // 将consumer注册到Eureka Server注册中心
@ComponentScan(basePackages = { "com.bie.springcloud" })
@EnableFeignClients(basePackages = { "com.bie.springcloud" })
public class MicroServiceCloudConsumerFeignApplication { public static void main(String[] args) {
SpringApplication.run(MicroServiceCloudConsumerFeignApplication.class, args);
} }

配置文件application.yml,如下所示:

 server:
port: eureka:
client: # 客户端注册进eureka服务列表内
register-with-eureka: false # eureka客户端,自己不能注册
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

启动Eureka Server的集群,三个节点的注册中心。启动三个部门微服务提供者。启动Feign进行负载均衡(Feign自带负载均衡配置项)。如下所示:
aaarticlea/png;base64,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AAAAAAAAAGDloAECAAAAAAAAAAAAAAArBw0QAAAAAAAAAAAAAABYOWiADMCJEyea48ePN8eOHWt99dVXW3Usc5KzLGQ/+bHrlw8fbg68fKh56eDLiIiIiIiIiIiIiCur3AeV+6FyX1TujwIINEAW4LXXXptpeHQpuVIzFkdfPUbDAxEREREREREREbe8cp9U7pfC1oYGSA/k0xw1jQ+v1A75iZBX19Y7uKzGx4GD6TgiIiIiIiIiIiJiylN4T1Hum8r9U9ia0ACpRBoXqaZGH4dogsibN/XGHsUDiRgiIiIiIiIiIiJil6f43uKxY3wt1laEBkgFQzY/1EWaIPKmTb2ZEREREREREREREXFWPglyksOHDzcvvvhis2/fvubxxx9vlXOJydyqQAOkkDGaH2qfJoj8lkjqTYyIiIiIiIiIiIiIacf8jebNwNGjR5unnnqqeeyxx5pHH320VRsgOpY5yZHczQ4NkEIW+c2PLmXtWg4e4sfOERERERERERERcWv59A+eaU3NlXjw0OKfbpAmyoMPPtjcfffdzc6dO5sdO3Y0t912W3t+8803N1/+8pebz3/+880XvvCF1i9+8YvNV7/61ea6667rdS9YuePOu6Zn/ZBPd2iDQ4979+5tH4so53ZOjlKzmRm8AXLo0KHmjz/0f1pPFdtv29Fsv3VH21wYAnlB+6aFV14IX7vksuaPPvjh5td+4x2tcv6FCy9q5zTvk+edP1On1nQej75a/7sf8pfCRX9/SfOB//2n69cn5xJb5C8MRERERERERERExGV51dXXtabmSpX7q4sgzQFpelhvvfXW9igNkCuuuKL50pe+1DZBpPlh3bVr13SVehZpgMg9arlu2+B4+OGHm29/+9vr1ybnErM54oEDB6arbD4GbYBo80Nv/p8qpAHynauvHawJ0vXpj+tuuKl557vfs95Y8Mqc5EjzQ8apNWo6fwdeTr9xI+UvBL2+j59zbvPlr17SKud6fYv9pfFo8/m3/Wrz+UdS8bOaHz5dtTnbmg+sx70fbG6aWeeke774q0V5E2f3+OUvPprImVf2yOfuaj790Y81n96RmkP5c7/43I81f3l59ByeiufPXNOOC5sPffTCZtt07qHLPzkzRkRERERERETEjet73vf+5r3v+8PkXKkHXj40vdPaj/vuu69tdsgnPuSTH6o0QaTBcdVV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Sauc6/X1bn5sBRMNAjQmvx5sOH2DosiRrwkREREREREREZej3LeUe5jyaQ/7P3jLuf42iH4lVqlyf3UR5NMdtoEgn/74yle+0lx77bXt12Pp737oV15Z5UfR+9K3ASL3n6WJIT7xxBNtY0OuWT7loV/fJdqY5Eiu1skaYyF/hurQDNoAEbQJIp4qpPExVPNDeO2119YbFZHydVjymyD6aQppKnzkzz7exmQuVWOVPUo5dqzuUyCidEGlMyofF9MXk5xLrNfXXm0ZJ58kyP1GxVZ3/uuohrVPA2Tsa0JERERERERExOUo/3N37n/eljnJSc1Fyv3VRdi5c2fbMNBPTci5NDf0kyHS+LCfANHmx5VXXtk8+OCD01Xq6dsAEfS3QLQJct999zVXXXVV27iRRo4o5xKTOdv8OHDgwHSVcdg0nwBZZbo+BbKINZ/+UGo/BYK4We31CRBERERERERERMSEi376Q5APAVxzzTXNRRddtP4pEDnK12DJ8ZJLLmkbHtr8kK/AksbCrl27qv5HeM8iDRDBNkH27t3bNjnktz0eeOCBVjmXmMwtq/kxNjRACun6LZBFLPntD4+8UVJvYERERERERERERERMu0gDYhU4evRo89RTT603OORHzuV3PkT9wXNRciR3s0MDpIIxmiB9mh/Kq8eOJd/EiIiIiIiIiIiIiDjrol99tUrIp1j279/fPP30023jQ5RzicncqkADpJIhmyCLND+UPr8H0tsDiRgiIiIiIiIiIiJil6f43uKx4zQ/tiI0QHogjYtFfhNEaodofijysa2DLx9KvrEH98DBdBwREREREREREREx5Sm8pyj3Tbf6115tZWiALIC8cWoaIZI75pvt6KvHmgPLaoQgIiIiIiIiIiIiblDlPqncL4WtDQ2QAZBPcxw/frxtcNiGiI5lbshPfHQh+x155Wjz8uHDNEQQERERERERERFx5ZX7oHI/9MjRo83x43ziAybQAAEAAAAAAAAAAAAAgJWDBggAAAAAAAAAAAAAAKwcNEAAAAAAAAAAAAAAAGDloAECAAAAAAAAAAAAAAArx2nf/MY3G0RERERERERERERExFWST4AAAAAAAAAAAAAAAMDKQQMEAAAAAAAAAAAAAABWDhogAAAAAAAAAAAAAACwctAAAQAAAAAAAAAAAACAlYMGCAAAAAAAAAAAAAAArBw0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" alt="" />

Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate,面向微服务名称进行编程),该请求发送给Eureka服务器(http://MICROSERVICECLOUD-PROVIDER-DEPT/dept/list),通过Feign直接找到服务接口,由于在进行服务调用的时候融合了Ribbon技术,所以也支持负载均衡作用。面向接口编程。

05-15 18:48