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

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

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

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

2024年10 大 Linux 桌面发行版推荐

年已过半,现在是探究 2024 年最流行的 Linux 发行版的最佳时机。Linux 是一个开源操作系统,构建在 Linux 内核上,并集成了 GNU shell 实用程序、桌面环境、应用程序、包管理系统。由于其通用性、安全性、用户友好性和多样性,它的受欢迎程度超过了其他操作系统。在本文中,我们将从...

面试官:聊聊你知道的Vue与React的区别

最近面到很多大公司的时候,小编都会碰到一个很尴尬的问题,很多大公司的技术栈都是React,但是小编学的是Vue,其实从本质上来说两者都是比较优秀的前端框架,所以有些面试官会问到Vue和React的区别。小编认真整理了一些自己所知道的Vue和React的区别,给大家分享分享。1. 模板语法 vs JS...

学会使用Vue JSX,一车老干妈都是你的

作者:子君转发链接:https://mp.weixin.qq.com/s/eAOivpHeowLShfwPfW8-BA?君自前端来,应知前端事。需求时时变,bug改不完。?连续几篇文章,每篇都有女神,被老铁给吐槽了,今天不提了女神了,反正女神都是别人的(扎心了)。这两天小编看了腾讯与老干妈的事情,晚...

内存问题探微

这篇文章是我在公司 TechDay 上分享的内容的文字实录版,本来不想写这么一篇冗长的文章,因为有不少的同学问是否能写一篇相关的文字版,本来没有的也就有了。说起来这是我第二次在 TechDay 上做的分享,四年前第一届 TechDay 不知天高地厚,上去讲了一个《MySQL 最佳实践》,现在想起来那...

壹啦罐罐 Android 手机里的 Xposed 都装了啥

这是少数派推出的系列专题,叫做「我的手机里都装了啥」。这个系列将邀请到不同的玩家,从他们各自的角度介绍手机中最爱的或是日常使用最频繁的 App。文章将以「每周一篇」的频率更新,内容范围会包括 iOS、Android 在内的各种平台和 App。本期继续歪楼,由少数派撰稿作者@壹啦罐罐介绍他正在使用的...

美国民众负债累累 但今年假期消费者支出仍将创下新高

智通财经APP获悉,在迎接假期之际,许多美国人已经背负了创纪录的信用卡债务。然而,今年假期消费者支出仍将创下新高。根据美国零售联合会(NRF)上周发布的报告,预计今年11月1日至12月31日期间的消费总额将达到创纪录的9795亿至9890亿美元之间。NRF首席经济学家Jack Kleinhenz表示...