Feign简介
Feign是一个声明式的web 服务客户端;它支持可插拔的注解,包含Feign注解和JAX-RS注解;并且支持可插拔的编码、解码;
Feign使用
1.maven依赖
<!--用于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.服务消费段(自定义接口)
public interface RemoteService {
@RequestLine("GET /getUser?name={name}&age={age}")
User getUser(@Param("name") String name, @Param("age") int age);
}
3.服务生产端
@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.测试(服务消费段)
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方法绑定接口与服务端地址