在之前的博客中我们提到过“豪猪“”《关于“豪猪”,你理解的透彻吗?【Hystrix是个什么玩意儿】》,今天我们聊聊“粪”,额,不要在意这些细节,我只是想了一个谐音。

那么,Feign是什么?他能做什么?

接下来我们一一介绍:

一、Feign是什么?

官网:
http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign

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

补充:《详解Eureka服务注册与发现和Ribbon负载均衡【纯理论实战】》

Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,
只需要创建一个接口,然后在上面添加注解即可。

参考官网:https://github.com/OpenFeign/feign

二、Feign能做什么?

Feign旨在使编写Java Http客户端变得更容易。

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

三、Feign集成了Ribbon

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

四、Feign的使用

在接口上:

//使用feign,并制定服务
@FeignClient(value = "SPIDER8001",fallbackFactory = SpiderClientServiceFallbackFactory.class)
public interface SpiderClientService {@RequestMapping("/search")String search(@RequestParam(value = "keyword")String keyword, @RequestParam(value="currentPage",defaultValue = "1") int currentPage, @RequestParam(value="pageSize",defaultValue = "10") int pageSize);
}

在启动类:

@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name="SPIDER8001")
@EnableFeignClients(basePackageClasses = SpiderClientService.class)
@EnableHystrixDashboard
public class SpiderConsumer9001App {public static void main(String[] args){SpringApplication.run(SpiderConsumer9001App.class, args);}
}

五、Feign的使用小结

在Spring cloud应用中,当我们要使用feign客户端时,一般要做以下三件事情 :

1)使用注解@EnableFeignClients启用feign客户端;

@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name="SPIDER8001")
@EnableFeignClients(basePackageClasses = SpiderClientService.class)
@EnableHystrixDashboard
public class SpiderConsumer9001App {public static void main(String[] args){SpringApplication.run(SpiderConsumer9001App.class, args);}
}

2)使用注解@FeignClient 定义feign客户端 ;
示例 : 该例子定义了一个feign客户端,将远程服务映射为一个本地Java方法调用。

//使用feign,并制定服务
@FeignClient(value = "SPIDER8001",fallbackFactory = SpiderClientServiceFallbackFactory.class)
public interface SpiderClientService {@RequestMapping("/search")String search(@RequestParam(value = "keyword")String keyword, @RequestParam(value="currentPage",defaultValue = "1") int currentPage, @RequestParam(value="pageSize",defaultValue = "10") int pageSize);
}

3)使用注解@Autowired使用上面所定义feign的客户端 ;

@Autowired
private SpiderClientService service;

上面的三个步骤,前两个步骤可以理解为定义feign客户端,第三步是使用所定义的feign客户端。通过调试发现,上面第三步所注入的testService是一个代理对象。该对象会代理客户端完成远程服务方法的调用

使用注解@EnableFeignClients 时,相当于启用了feign客户端定义的扫描和注册机制,从而可以发现开发人员通过注解@FeignClient定义的feign客户端,并最终作为bean定义注册到容器中。而通过@Autowired自动装配注解,这些feign客户端会以ReflectiveFeign$FeignInvocationHandler动态代理的形式被注入到使用方。该feign客户端包含了对每个接口方法的处理器MethodHandler,接口缺省方法对应DefaultMethodHandler,服务功能端点方法对应SynchronousMethodHandler。

关于“粪”,你知道多少?【Feign是个什么玩意儿?】相关推荐

  1. 快速排查feign.FeignException: status 500 …

    feign.FeignException: status 500 - 总结一下feign报500的时候快速排查问题的方法, 这个bug容易出现的地方分别为: 1. 远程调用的时候feign的注册信息有 ...

  2. 使用feign调用注解在eureka上的微服务,简单学会微服务

    使用feign调用注解在eureka上的微服务. 首先,确保所有服务(调用方与被调用方)都被注册在同一个eureka服务上. 1. 在调用方添加依赖(万事第一步,加依赖) <dependency ...

  3. SpringCloud Alibaba微服务实战(三) - Nacos服务创建消费者(Feign)

    什么是Feign Feign 是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单.使用 Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用 Feign 注解和 ...

  4. 【微服务架构】SpringCloud之Feign

    什么是Feign Feign 是一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Fe ...

  5. 如何通过HTTP优雅调用第三方-Feign

    Java常用HTTP客户端 Java原生HttpURLConnection Apache HttpClient OkHttp Spring RestTemplate 示例 public interfa ...

  6. SpringCloud Feign声明式服务调用

    SpringCloud Feign声明式服务调用 1. 加入pom依赖 2. Application.java上声明@EnableFeignClients 3. @FeignClient声明接口调用服 ...

  7. 企业分布式微服务云SpringCloud SpringBoot mybatis - 服务消费者(Feign)

    一.Feign简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注 ...

  8. java B2B2C springmvc mybatis多租户电子商城系统-Spring Cloud Feign

    1.什么是Feign? 愿意了解源码的朋友直接企鹅求求:二一四七七七五六三三 Feign 的英文表意为"假装,伪装,变形", 是一个http请求调用的轻量级框架,可以以Java接口 ...

  9. Feign实现服务调用

    上一篇博客我们使用ribbon+restTemplate实现负载均衡调用服务,接下来我们使用feign实现服务的调用,首先feign和ribbon的区别是什么呢? ribbon根据特定算法,从服务列表 ...

最新文章

  1. 不再写死,SpringBoot实现动态增删启停定时任务
  2. SDR、DDR、QDR存储器的比较
  3. 基于Solr的空间搜索学习笔记
  4. MybatisPlus中insert方法与insertAllColumn方法的区别
  5. idea中启动RunDashboard
  6. eclipse 快捷键大全
  7. 微服务网关Gateway-PrefixPath讲解
  8. 【linux】服务器运维必备之linux常用命令合集
  9. HDU 6325 Problem G. Interstellar Travel(凸包)
  10. 国科大prml13-概率图(CRF,HMM)
  11. pycharm 安装_pycharm安装
  12. 图 邻接表 建立 深度遍历 广度遍历
  13. java二维码小试牛刀
  14. kettle创建mysql资源库时报错_kettle 创建数据库资源库
  15. google海底光缆图_谷歌地图资讯-2013版“海底光缆地图”发布
  16. NAT协议(网络地址转换协议)详解
  17. linux格式化分区error,linux格式化磁盘出错
  18. 从官方下载IAR方法
  19. 名帖329 王羲之 草书《游目帖》
  20. 求问,如何计算距离一个经纬度坐标点500㎞范围内的半圆面积平均?

热门文章

  1. CodeForces - 817D Imbalanced Array(单调栈)
  2. html css 画五角星,纯 CSS3 绘制图形(心形、五角星、六边形等)
  3. Fib数模n的循环节
  4. HDU3662(求三维凸包表面的多边形个数,表面三角形个数,体积,表面积,凸包重心,凸包中点到面的距离)
  5. [HAOI2015][loj2127]按位或
  6. 【Boost】boost库中bind的用法
  7. c++ reference counting引用计数原理
  8. 数据库服务器(SQL SERVER)的安全设置
  9. SQLServer附加数据库提示“版本为661,无法打开,支持655版本……”
  10. 第32讲:实时处理利器 mitmproxy 的使用