当前位置:首页 > 技术分析 > 正文内容

Feign简单介绍及入门demo(feign encoder)

ruisui883个月前 (02-03)技术分析24

什么是Feign

Feign是一个声明式的http客户端,作用就是帮助我们更快捷,优雅的调用http接口。

除Feign之外,在Java中经常使用的HTTP客户端组件主要有3个,如下:
(1)HttpURLConnection,JDK自带
(2)Apache HttpClient,独立的HTTP客户端实现,使用广泛,目前已发展到5.x版本,详见:https://hc.apache.org/index.html
(3)OkHttp,一个新出现的HTTP客户端,详见:https://square.github.io/okhttp/

为什么已经存在了如Apache HttpClient和OkHttp这样优秀HTTP客户端组件了,还会出现Feign呢?难道不是重复发明轮子吗?

实际上,Feign并没有去做跟Apache HttpClient或OkHttp一样重复的事情,而是一个Http客户端框架,用于集成诸如URLConnection,Apache HttpClient,OkHttp这样的Http客户端实现。这种关系就像Slf4j跟Log4j,Logback一样:Slf4j提供了一套日志API,而具体的日志实现可以是Log4j或者Logback,参考细说java平台日志组件。

模块介绍及作用

Feign框架自身包含多个模块,这些模块的作用是为了实现Feign与其他组件的集成。
主要模块如下:

  • feign-gson:集成Gson组件,用于实现Json格式的请求编码和响应解码
  • feign-jackson:集成jackson-databind组件,用于实现Json格式的请求编码和响应解码
  • feign-okhttp:集成OkHttp组件,使用OkHttp作为底层通信实现
  • feign-httpclient:集成HttpClient组件,使用HttpClient作为底层通信实现
  • feign-ribbon:集成Netflix/ribbon组件,实现请求负责均衡
  • feign-hystrix:集成Netflix/Hystrix组件,实现异常熔断
  • feign-slf4j:集成SLF4J日志框架,可以灵活地实现日志信息的输出
  • feign-form:feign-form是Feign提供的一个独立的组件,用于实现表单格式的请求参数传递

使用Feign的好处

声明式调用就像调用本地方法一样调用远程方法;无感知远程 http 请求。

1、Feign的声明式调用, 可以做到使用 HTTP 请求远程服务时能就像调用本地 方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。

2、它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,而不需要通过常规的 Http Client 构造请求再解析返回数据。

3、它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。

单独使用Feign

单独使用Feign框架是最简单,也是最基础的使用方式,掌握了如何独立使用Feign框架,才能对在Spring框架中集成使用Feign有更加清晰的理解。

第一步:在pom.xml中引入Feign依赖



    io.github.openfeign
    feign-core
    10.10.1

第二步:定义业务接口

public interface UserFeignApiClient {

    /**
     * @RequestLine 指定HTTP方法和请求路径
     * @param 指定单个表单参数,只能用在POST请求中
     */
    @RequestLine("POST /jpcx/login?username={username}&password={password}")
    String queryUser(@Param("username") String username, @Param("password") String password);
}

在业务接口中通过注解来定义请求信息,Feign默认提供的注解有6个:

1)@RequestLine,用在方法上,用于指定HTTP方法和请求路径

2)@Param,用在方法参数上,用于指定HTTP方法和请求路径

3)@Headers,用在方法或接口上,用于指定单个HTTP请求头,在接口上使用时为所有方法指定相同的消息头,在方法上使用时只为该方法自身指定消息头

4)@QueryMap,用在方法参数上,用于指定批量动态查询URL参数,被标注的对象可以是一个Map集合,也可以是一个POJO对象

5)@HeaderMap,用在方法参数上,用于指定批量HTTP请求头参数

6)@Body,用在方法上,用于为PUT或POST方法指定一个模板消息体


第三步:调用接口方法

public class FeignDemo {

    public static void main(String[] args) {
        UserFeignApiClient userFeignApiClient = Feign.builder()
                .target(UserFeignApiClient.class, "https://xxx.xxxcom");
        String obj = userFeignApiClient.queryUser("user","123456");
        System.out.println(obj.toString());
    }

}

接口调用返回

Feign简单介绍及入门demo就完成啦!是否很简单?Feign作为一个框架组件,给开发者带来了哪些便利呢?其实现原理又是怎么样的呢?后续一一道来,敬请请关注!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1159.html

标签: feign 使用
分享给朋友:

“Feign简单介绍及入门demo(feign encoder)” 的相关文章

Java教程:gitlab-使用入门

1 导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作GitLab简介GitLab环境搭建GitLab基本使用(组、权限、用户、项目)2 GitLab简介GitLab是整个DevOps生命周期...

虚幻引擎5.5发布

IT之家 11 月 13 日消息,虚幻引擎 5.5 现已发布。据介绍,新版本虚幻引擎在动画创作、虚拟制作和移动游戏开发方面取得进步;渲染、摄像机内视觉特效和开发人员迭代等领域的部分功能已可用于生产。IT之家整理部分功能亮点如下:动画Sequencer增强虚幻引擎的非线性动画编辑器 Sequencer...

学前端,这30个CSS选择器,你必须熟记

你学会了基本的id,class类选择器和descendant后代选择器,然后就觉得完事了吗?如果这样,你就会错过许多灵活运用CSS的机会。虽然本文提到的许多选择器都属于CSS3,并且只能在现代的浏览器中使用,但学会这些是大有好处的。什么是CSS选择器呢?每一条css样式定义由两部分组成,形式如下:[...

Vue2的16种传参通信方式

前言先直入主题列出有哪些传参方式,下面再通过事例一一讲解。props(父传子)$emit与v-on (子传父)EventBus (兄弟传参).sync与update: (父子双向)v-model (父子双向)ref$children与$parent$attrs与$listeners (爷孙双向)pr...

Vue进阶(二十六):详解router.push()

在Vue2.0路由跳转中,除了使用 <router-link> 声明式创建 a 标签来定义导航链接,还可以借助 router 的实例方法,通过编码式编写代码来实现。router.push(location)想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 hi...

微信小程序发展越来越快,Flutter应用开发越来越低效?

目前的疑惑微信小程序发展的越来越快,目前小程序甚至取代了大部分 App 的生态位,公司的坑位不增反降,只能让原生应用开发兼顾或换岗进行小程序的开发。以我的实际情况来讲,公司应用采用的 Flutter 框架,同样的功能不可避免的就会存在 Flutter 应用开发和微信小程序开发兼顾的情况,这种重复造轮...