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

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

ruisui884个月前 (02-03)技术分析33

什么是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)” 的相关文章

Linux 最主要的发行分支

Linux 有数百个发行分支。主要的有以下四个。slackwareSlackware 是由 Patrick Volkerding 在 1992 年推出的,它是全球现存最古老的 Linux 发行版。Slackware 被设计为高度可定制和强大的,并且要求用户了解 每个元素,它的包系统是不支持依赖的。...

代码管理-9-gitlab的使用和设置

gitlab使用1、外观设置完成后保存,返回登录页面查看关于注册,有些公司是不允许打开的,,有些人数非常多的公司就需要打开注册的功能,让人员自己注册,我们来给他特定的权限就可以,毕竟人非常多的时候还由我们来给她们注册就非常不现实了,工作量会很大2、自动注册3、组&用户&项目创建组设置组名称、描述等创...

双子座应用程序推出模型切换器以在Android上访问2.0

#头条精品计划# 快速导读谷歌推出了Gemini 2.0 Flash实验版,现已在其安卓应用中可用,之前仅在gemini.google.com网站上提供。新版本的15.50包含模型切换器,用户可以在设置中选择不同模型,包括1.5 Pro、1.5 Flash和2.0 Flash实验版。谷歌提醒,2.0...

12种JavaScript中最常用的数组操作整理汇总

数组是最常见的数据结构之一,我们需要绝对自信地使用它。在这里,我将列出 JavaScript 中最重要的几个数组常用操作片段,包括数组长度、替换元素、去重以及许多其他内容。1、数组长度大多数人都知道可以像这样得到数组的长度:const arr = [1, 2, 3]; console.log(a...

分享15个基于Vue3.0全家桶的优秀开源项目

大家好,我是 Echa。今天来分享 15 个基于 Vue3.0 全家桶的优秀开源项目!1. Vue Admin Bettergithub : https://github.com/chuzhixin/vue-admin-bettervue admin better 对比其他来源 admin 框架有如...

「干货」Vue+Element前端导入导出Excel

作者:xrkffgg转发链接:https://segmentfault.com/a/11900000189936191 前言1.1 业务场景由前台导入Excel表格,获取批量数据。根据一个数组导出Excel表格。2 实现原理2.1 引入工具库file-saver、xlsx、script-loader...