springcloud学习手册-Feign

导读 | Feign是一种声明式、模板化的HTTP客户端。

一、Feign是什么?

Feign是简化Java HTTP客户端开发的工具(java-to-httpclient-binder),它的灵感来自于Retrofit、JAXRS-2.0和WebSocket。Feign的初衷是降低统一绑定Denominator到HTTP API的复杂度,不区分是否为restful。

总结:Feign是一种声明式、模板化的HTTP客户端。

二、为什么使用Feign?

开发人员使用Jersey和CXF等工具可以方便地编写java client,从而提供REST或SOAP服务;开发人员也可以基于Apache HC等http传输工具包编写自己的java http client;而Feign的关注点在于简化开发人员使用工具包的复杂度,以最少的代码编写代码从而提供java http客服端。通过定制解码器和异常处理,开发人员可以任意编写文本化的HTTP API。

总结:使用它的目的就是简化并提供java http客服端。

三、Feign的工作原理?

Feign通过处理注解生成request,从而实现简化HTTP API开发的目的,即开发人员可以使用注解的方式定制request api模板,在发送http request请求之前,feign通过处理注解的方式替换掉request模板中的参数,这种实现方式显得更为直接、可理解。

四、如何使用Feign呢?

主要步骤如下:

第一步:在pom.xml配置文件中引入资源包

第二步:项目启动类中,添加feign的注解。主要有@EnableFeignClients。这里我们也引入了eureka的注解,因为一般情况下feign与eureka一起使用的。

  • 启动类
  • 配置文件也需要配置,主要是eureka的配置。

说明:其中port 服务端口;name 服务名称;eureka 的配置

第三步:在controller控制类文件,通过@UserFeignClient 注解引入客户端使用。

第四步:在controller控制类文件,通过@UserFeignClient 注解引入客户端使用。

第五步:写了一下客户端去测试。

但注意有两个坑:1. @GetMapping不支持 2. @PathVariable得设置value。其中该请求不会成功,只要参数是复杂对象,即使指定了是GET方法,feign依然会以POST方法进行发送请求。可能是我没找到相应的注解或使用方法错误。

四、feign的配置

五、总结使用的常见问题

  • FeignClient接口,不能使用 @GettingMapping 之类的组合注解
  • FeignClient接口中,如果使用到 @PathVariable ,必须指定其value
  • FeignClient方法中的参数,暂不支持GET复杂对象
  • Feign如果想要使用Hystrix Stream,需要做一些额外操作。Feign本身就是支持Hystrix的,可以直接使用 @FeignClient(value = "microservice-provider-user", fallback = XXX.class) 来指定fallback的类,这个fallback类集成@FeignClient所标注的接口即可。但是假设需要使用Hystrix Stream进行监控,默认情况下,访问 http://IP:PORT/hystrix.stream 是个404。如何为Feign增加Hystrix Stream支持呢?
  • 如果需要自定义单个Feign配置,Feign的 @Configuration 注解的类不能与 @ComponentScan 的包重叠。如果包重叠,将会导致所有的Feign Client都会使用该配置。

声明:文章属于个人原创,转载请注明文章出处

原文发布于微信公众号 - 全华班(quanhuaban)

原文发表时间:2018-01-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏伦少的博客

spark-submit报错: java.sql.SQLException:No suitable driver

转载请务必注明原创地址为:http://dongkelun.com/2018/05/06/sparkSubmitException/

4365
来自专栏Linyb极客之路

使用Spring Boot实现模块化

3512
来自专栏运维

RH413-RHEL6.4课程总结

RH413-RHEL6.4课程总结 Unit1 Tracking Security Updates 更新分以下三类 RHSA RHBA RHEA yum up...

981
来自专栏青玉伏案

JavaEE开发使用Maven管理的SpringMVC工程

前几篇博客已经陆陆续续的聊了一些Spring的东西,今天博客我们就来聊一下SpringMVC。SpringMVC目前在JavaEE开发中可谓占据一席之地,用起来...

20810
来自专栏逆向技术

调试器第二讲,单步步入/步过功能实现,以及基本的断点功能实现

           调试器第二讲,单步步入/步过功能实现,以及基本的断点功能实现 昨天,我们实现了调试器的基本框架,那么今天我们实现单步功能,还有断点功能,以...

2326
来自专栏菩提树下的杨过

hessian学习

hessian是一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。官网地址:http://hessian.caucho...

1886
来自专栏运维前线

实现Shell脚本自动备份Gitlab档案并同步到远程

实现脚本自动备份Gitlab档案并同步到远程 参考:Gitlab的备份与恢复 Gitlab服务器与备份服务器进行密钥配对,免密使用scp传输Gitlab备...

3926
来自专栏大魏分享(微信公众号:david-share)

重点来了:事务一致性的深入研究&EJB的全生命周期 | 从开发角度看应用架构5

1224
来自专栏王清培的专栏

spring rest 容易被忽视的后端服务 chunked 性能问题

spring boot 容易被忽视的后端服务 chunked 性能问题 标签(空格分隔): springboot springmvc chunked 背景 sp...

4348
来自专栏别先生

Spring之hello world(Spring入门)

spring各个版本中: 在3.0以下的版本,源码有spring中相关的所有包【spring功能 + 依赖包】 如2.5版本; 在3.0以上的版本,源...

19710

扫码关注云+社区