Feign在项目中的作用是什么?
在调用其它服务的接口时可以使用,作用和spring的restTemplate相同。
调用外部的接口会更加的简单,代码也会非常规整
如何使用feign
1)引入openfeign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2)在启动类上@EnableFeignClients注解,开启feign客户端
@EnableFeignClients @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
3)定义一个FeignClient客户端,其实就是定义个一个接口,加上@feignClient注解
Value处写上需要调用的服务的spring.application.name, configuration可以引入自定义的配置类,接口上添加@GetMapping或者@PostMapping ,加上应用controller层的url
@FeignClient(value="eureka-client-user-service", configuration=FeignConfiguration.class) public interface UserRemoteClient { @GetMapping("/user/hello") String hello(); }
4)Feign如果不设置响应超时时间的话,默认值是什么?
默认的readoutoftime是1秒,connectOutOfTime是1秒
5)Feign继承特性
创建3个项目:
Api:定义接口项目,被api的提供者和使用者所依赖,通过pom文件的形式
Api-provider:依赖api项目,在controller层实现api的接口
Api-consumer:依赖api项目,通过使用api的client接口的方式实现远程调用
特点:
简单,清晰
6)可以添加自定义拦截器,统一对请求进行加工处理
Feign的原理
- 使用Proxy.newProxyInstance生成动态代理
- 默认使用的HttpURLConnection对外发出请求,可以转成使用HttpClient或者是OKHttp, 后两者使用了连接池,减少创建连接的cpu消耗,便于管理对外的连接数。OKHttp采用共享的socket,节约服务器资源,加快响应速度