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.服务生产端
@RestControllerpublic 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 {@Testpublic 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方法绑定接口与服务端地址
