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 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2576
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4045
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5506
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6908
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31810
来自专栏魂祭心

原 canvas绘制clock

4144
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2182
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2587
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7

扫码关注云+社区