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

相关文章

来自专栏java学习

Spring学习笔记1_Spring的概述

本章目录 Spring学习笔记1_Spring的概述 1.Spring介绍 2.Spring作用 3.Spring起源 4.Spring体系结构 5.Spri...

2856
来自专栏Java学习之路

01 Spring框架 基本介绍

相信学习java,并且走Web道路的道友都应该知道Spring的大名,它的地位相信也不需要我在这里多说什么,接下来的文章就Spring的配置和使用来进行一些讲解...

3207
来自专栏瞎说开发那些事

[微服务系列] 3. 服务治理 2 --- Eureka集群

22010
来自专栏架构师之旅

《Spring敲门砖之基础教程第一季》 第一章(2)解读Spring Framework

系统架构 一个成功的项目离不开一个好的架构,一个好的架构自然需要一位好的设计师, Rod Johnson正是Spring的前生总架构设计师,那...

1736
来自专栏LanceToBigData

Spring(一)Spring的第一滴血

前言   开始工作了,但是一进来公司本来是做爬虫和数据分析的,但是走了一个后端的,导致我必须要去顶替他的工作。因为这个项目使用的是Spring、   Sprin...

2146
来自专栏搜云库

Spring Cloud(三)服务提供者 Eureka + 服务消费者(rest + Ribbon)

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通...

1899
来自专栏Java 源码分析

SpringCloud:Eureka服务注册与发现

Eureka 其实就是一个 服务注册与发现的中心,也就是相当于我们前面做的一些生产者的服务需要注册到我们的注册中心,那么我们的消费者就不用把代码写死,而是可以去...

1013
来自专栏SpringBoot 核心技术

SpringCloud组件:Eureka的服务发现与消费

在之前的章节我们已经把服务注册到Eureka Server,那么我们该怎么调用已经注册后的服务呢? 我们本章来简单的介绍我们具体该怎么调用服务节点请求内容。

451
来自专栏闻道于事

Spring技术内幕:设计理念和整体架构概述

1133
来自专栏编程坑太多

SpringCloud分布式开发五大神兽

1462

扫码关注云+社区