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 Boot Runner启动器

Runner启动器 如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口 ApplicationRunner或者 CommandLine...

2497
来自专栏小特工作室

1分钟生成Net对象的注释

      我们在开发过程中,肯定会有几个项目作为基础项目,存放一些比较常用的类和方法,供其他项目使用.一般来说,方法实现以后,就不想再去管它了,以致于新加入的...

1656
来自专栏程序猿DD

Spring Boot 1.5.x新特性:动态修改日志级别

前天Spring Boot 1.5终于迎来了第一个RELEASE版本:1.5.0,但是由于一个编译依赖问题在第二天直接连击到了1.5.1。该版本的发布包含了超过...

2109
来自专栏Golang语言社区

Golang语言社区--wesocket的demo(包括H5前端,GO后端)

go代码: package main import ( "flag" "fmt" "glog-master" ...

36615
来自专栏Kiba518

C#——Nhibernate探索

该版本可能是最新版,我下载的4.0.4.GA。其中GA意思我没搞清楚。不过应该不重要。

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

spring cloud 学习(4) - hystrix 服务熔断处理

hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,...

1835
来自专栏不止是前端

实用主义:前端cookie介绍及操作封装

41816
来自专栏猿天地

Netty-整合Protobuf高性能数据传输

前言 本篇文章是Netty专题的第四篇,前面三篇文章如下: 高性能NIO框架Netty入门篇 高性能NIO框架Netty-对象传输 高性能NIO框架Netty-...

26911
来自专栏互联网杂技

SpringBoot ( 二 ) :web 综合开发

spring boot web开发非常的简单,其中包括常用的json输出、filters、property、log等。

903
来自专栏芋道源码1024

注册中心 Eureka 源码解析 —— 项目结构简介

本文主要基于 Eureka 1.8.X 版本 1. 概述 1.1 简介 1.2 项目结构 2. eureka-client 2.1 eureka-client-...

4248

扫描关注云+社区