概要

  • Feign简介
  • Feign简单使用

Feign简介

Feign是一个声明式的web 服务客户端;它支持可插拔的注解,包含Feign注解和JAX-RS注解;并且支持可插拔的编码、解码;

Feign使用

1.maven依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!--用于feign的编解码-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-gson</artifactId>
<version>9.5.1</version>
</dependency>
<!--feign的核心依赖-->
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-core</artifactId>
<version>8.18.0</version>
</dependency>
<!--用于feign的请求-->
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>8.18.0</version>
</dependency>

2.服务消费段(自定义接口)

1
2
3
4
public interface RemoteService {
@RequestLine("GET /getUser?name={name}&age={age}")
User getUser(@Param("name") String name, @Param("age") int age);
}

3.服务生产端

1
2
3
4
5
6
7
8
9
10
@RestController
public class FeignController {
@GetMapping("getUser")
public User getUser(@RequestParam String name, @RequestParam int age) {
User user = new User();
user.setAge(age);
user.setName(name);
return user;
}
}

4.测试(服务消费段)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class FeignControllerTest {
@Test
public void test() {
RemoteService remoteService = Feign.builder()
.client(new OkHttpClient())
.decoder(new GsonDecoder())
.encoder(new GsonEncoder())
.options(new Request.Options(1000, 2000))
.retryer(new Retryer.Default(1000, 2000, 2))
.target(RemoteService.class, "http://127.0.0.1:8080");
User user = remoteService.getUser("qiudx", 23);
System.out.println(user);
}
}
  • OkHttpClient使用OkHttp来发送Feign的请求,OkHttp支持SPDY(SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验),并有更好的控制http请求。
  • Feign.builder()允许你自定义一些额外的配置,比如说如何解码一个响应。假如有接口方法返回的消息不是Response,String,byte[]或者void类型的,那么你需要配置一个非默认的解码器
  • options方法指定连接超时时长及响应超时时长
  • retryer方法指定重试策略
  • target方法绑定接口与服务端地址