Feign简介

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

Feign使用

1.maven依赖

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

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

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

3.服务生产端

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

4.测试(服务消费段)

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