概要
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 <dependency > <groupId > io.github.openfeign</groupId > <artifactId > feign-gson</artifactId > <version > 9.5.1</version > </dependency > <dependency > <groupId > com.netflix.feign</groupId > <artifactId > feign-core</artifactId > <version > 8.18.0</version > </dependency > <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方法绑定接口与服务端地址