Feign
1.简介
Feign是一种声明式、模板化的HTTP客户端。 在SpringCloud中使用Feign,我们可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样,做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。
2.快速入门
•导入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> |
•编写Fegin的客户端
import org.springframework.cloud.openfeign.FeignClient;
|
1.通过@FeignClient 声明Feign客户端。
① value:用于设置服务名称
② path:用于设置路径的前缀(也就是controller类上配的路径)
2.Feign类似于MyBatis.
① @FeignClient类似于 @Mapper注解
② Feign是一个接口,可以通过动态代理来帮我们生成实现类.这就跟mybatis的mapper类似
3.Feign接口中定义的方法,完全采用SpringMVC的注解,Feign中的方法需要与服务的方法声明完全一致,
Feign会根据注解帮我们生成URL,访问并获取结果.
•在服务调用方注入DataFeign
@Resource |
•开启Feign功能
在启动类上,添加注解,开启Feign功能
@EnableFeignClients |
•运行测试
3.整合Ribbon
Feign中本身已经集成了Ribbon依赖,不需要额外引入依赖,就可以完成负载均衡处理。
可以通过ribbon.xx来进行全局配置。也可以通过服务名.ribbon.xx来对指定服务配置,例举局部:
user-service: ribbon: ConnectTimeout: 250 # 连接超时时间(ms) ReadTimeout: 1000 # 通信超时时间(ms) OkToRetryOnAllOperations: true # 是否对所有操作重试 MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数 MaxAutoRetries: 1 # 同一实例的重试次数 |
4.Hystix支持
Feign默认也有对Hystix的集成,只不过,默认情况下是关闭的。
我们需要通过下面的参数来手动开启:
feign: hystrix: enabled: true # 开启Feign的熔断功能 |
•编写DataFeign的实现,作为fallback的处理类
import org.springframework.stereotype.Component; @Component |
•DataFeign接口中,指定刚才编写的实现类
@FeignClient(value="service",path="/test",fallback = DataFeignFallback.class) public interface DataFeign { @GetMapping public ResponseEntity<String> test(); } |
•重启测试