SpringCloud 学习 --->>> 9、OpenFeign 服务接口调用 -->> 初步认识 OpenFeign
概述
Feign 是一个声明式 WebService 客户端。使用Feign能让编写Web Service客户端更加简单。
它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。
Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。
Feign可以与Eureka和Ribbon组合使用以支持负载均衡
用途
Feign旨在使编写Java Http客户端变得更容易。
前面在使用 Ribbon+RestTemplate 时,利用 RestTemplate 对 http请求 的封装处理,形成了一套模版化的调用方法【就是get/postForObject/Entity这种模板方法】。
但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。
在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用SpringCloudRibbon 时,自动封装服务调用 客户端的开发量。
Feign集成了Ribbon
利用Ribbon维护了服务提供方模块的服务列表信息,并且通过轮询实现了客户端的负载均衡。
而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用
Feign 和 OpenFeign
Feign
- Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端
- Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。
- Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务
**OpenFeign **
- OpenFeign是Spring Cloud 在 Feign的基础上支持了SpringMVC的注解,如 @RequesMapping 等等。
- OpenFeign的 @FeignClient 可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
官网给了一段示例代码
主启动上
@SpringBootApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
调用接口上
在@FeignClient注释中,String 值(上面的“stores”)是一个任意客户端名称,用于创建Ribbon负载均衡器或Spring Cloud负载均衡器。您还可以使用url属性(绝对值或仅主机名)指定 URL。
@FeignClient 注解的值是在注册中心中服务名,里面的方法和映射就是服务提供方controller里面粘过来。等程序启动了就通过请求映射去找注册中心的服务和对应的路径完成请求。
@FeignClient("stores")
public interface StoreClient {
@RequestMapping(method = RequestMethod.GET, value = "/stores")
List<Store> getStores();
@RequestMapping(method = RequestMethod.GET, value = "/stores")
Page<Store> getStores(Pageable pageable);
@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")
Store update(@PathVariable("storeId") Long storeId, Store store);
}
为了开发速度和减少代码量
其实Feign和OpenFeign差不多,OpenFeign是在Feign的基础上改进,添加了对SpringMVC注解和HTTPMessageConverter 请求报文转换器的支持,
后面偷懒Openfeign都叫feign
首先明确一点Feign一般在客户端使用,就是Client。

浙公网安备 33010602011771号