Feign简单介绍及入门demo

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

什么是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简单介绍及入门demo

Feign框架

模块介绍及作用

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依赖

<!--单独引入feign-core依赖-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-core</artifactId>
    <version>10.10.1</version>
</dependency>

第二步:定义业务接口

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/87692.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信