什么是 Feign?

Sherwin.Wei Lv7

什么是 Feign?

回答重点

Feign 是一个声明式的Web服务客户端。

所谓的声明式就是指不需要编写复杂的关于 Http 请求的东西。

只需要声明一个一个接口,然后在这个接口上添加一些注解,这些注解包括了请求的方法(如GET和POST)、请求的URL等信息

Feign 在运行时通过注解和接口上定义的内容来动态构造和发送 Http 请求。

所以使用 Feign,开发者只需要定义服务接口并通过注解指明服务名和参数等信息,Feign 就能自动完成 Http 请求的构建、发送和结果处理。

Feign 也是 Spring Cloud Netflix 组件之一,结合Spring Cloud 的服务注册和发现、负载均衡等功能,能够让服务间的调用变得更加方便。

总体来说,Feign 的主要特点有:

  • 声明式的服务客户端,通过 Java 接口和注解构建服务客户端,简化了 Http 调用的使用过程,无需手动构建 HTTP 请求
  • 很好地融入了 SpringCloud 生态,可以使用 SpringCloud负载均衡、服务熔断等能力

扩展内容

为了更好地理解上述内容,这里对上述内容进行一部分扩展讲解

为什么要有Feign

在项目中,我们经常需要调用第三方提供的 Http 接口,此时我们就可以使用一些 Http 框架来实现,比如 HttpClient

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class HttpClientDemo {

public static void main(String[] args) throws Exception {
//创建一个HttpClient
HttpClient httpClient = HttpClientBuilder.create().build();

//构建一个get请求
HttpGet httpGet = new HttpGet("http://192.168.100.1:8080/order/1");

//发送请求,获取响应
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();

//读出响应值
String response = EntityUtils.toString(httpEntity);

System.out.println("Response: " + response);
}

}

如果项目中只有一两个这种第三方接口这样写还行,但是一旦这种三方接口过多的话,每次都得这样组装参数,发送请求,写一堆同样的代码,就显然很麻烦了。

所以为了简化发送 Http 请求的开发,减少重复代码,Feign 就出现了。

Feign 是一个声明式的 Http 框架,当你需要调用 Http 接口时,你需要声明一个接口,加一些注解就可以了

而像组装参数、发送Http请求等重复性的工作都交给 Feign 来完成。

Feign 和 OpenFeign 的区别

Feign 和 OpenFeign 的区别

Comments