专栏首页程序源代码springcloud学习手册-Feign

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),作者:全华

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分享一套SSM开发框架(含源代码)

    SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛。

    程序源代码
  • 认识工作流- What is Activiti?

    阅读文本大概需要 5 分钟。 一、Activiti是什么? ? 我们前文中提到了工作流的概念。工作流是以任务的形式驱动人处理业务或者驱动业务系统...

    程序源代码
  • 轻量级 Java Web 框架

    基于java语言开发的便捷、开源、轻量级 Java Web 框架;内置 IOC、AOP、ORM、DAO、MVC 等;基于 Servlet 3.0 规范;使用 J...

    程序源代码
  • Feign 基本使用

    ​ 在开发 Spring Cloud 微服务的时候,我们知道,服务之间都是以 HTTP 接口的形式对外提供服务的,因此消费者在进行调用的时候,底层就是通过...

    剑行者
  • Spring Cloud 使用 Feign 调用服务接口

    在 Application 主类上添加 @EnableFeignClients 注解

    北漂的我
  • Flask使用mysql数据池

    人生不如戏
  • 特征工程之特征预处理

    由于标准化和归一化这两个词经常混用,所以本文不再区别标准化和归一化,而通过具体的标准化和归一化方法来区别具体的预处理操作。

    week
  • Top命令学习

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

    zhangheng
  • Linux系统内存监控、性能诊断工具vmstat命令详解

    最近,烦心事有点多,博客也像是进入了便秘期。虽然还远远不到说放弃的地步,但总有一种挤不出牙膏的郁闷感。很怀念前几个月的冲劲和激情,一天都能存好几篇优质草稿。 看...

    张戈
  • Linux 当文件系统坏掉了该怎么整

    小手冰凉

扫码关注云+社区

领取腾讯云代金券