前面我们学习了使用Ribbon,大大简化了远程调用时的代码
# ribbon远程调用服务
restTemplate.getForObject("http://eureka-client-user/hello", String.class);
我们思考下,还有没有更优雅的方式呢?
这就是我们接下来要学习的Feign。
Feign简介
feign的中文翻译是假装、伪装的意思。
它可以把Rest请求进行隐藏,伪装成类似SpringMVC的Controller一样,让你可以不用拼接url,这些Feign都帮你来完成。
快速入门
- 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
- Feign客户端
/**
* @FeignClient: 声明这是一个Feign客户端
* value : 指定服务名称
* fallback : 熔断错误处理类
* 接口中的定义方法,完全采用SpringMVC的注解,Feign会根据注解帮我们生成URL,并访问获取结果
*/
@FeignClient(value = "eureka-client-user", fallback = UserFeignClientFallback.class)
public interface UserFeignClient {
@GetMapping("/hello")
String hello();
}
- 开启Feign
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class, args);
}
}
- 开启Hystix熔断
默认Feign集成了Hystix
feign:
hystrix:
enabled: true # 开启Feign的熔断功能
# fallback处理类
@Component
public class UserFeignClientFallback implements UserFeignClient {
@Override
public String hello() {
return "error";
}
}
- Ribbon负载均衡
Feign中本身已经集成了Ribbon依赖和自动配置,我们不需要引用额外的配置,也不需要注册RestTemplate对象。
我们也可以自定义区配置Ribbon
eureka-client-user:
ribbon:
ConnectTimeout: 250 # 连接超时时间(ms)
ReadTimeout: 1000 # 通信超时时间(ms)
OkToRetryOnAllOperations: true # 是否对所有操作重试
MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
MaxAutoRetries: 1 # 同一实例的重试次数
到这里就配置好了,可以测试了。
Feign的其他功能(了解)
- 请求压缩
Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数即可开启请求与响应的压缩功能
feign:
compression:
request:
enabled: true # 开启请求压缩
response:
enabled: true # 开启响应压缩
同时,我们也可以对请求的数据类型,以及触发压缩的大小下限进行设置
feign:
compression:
request:
enabled: true # 开启请求压缩
mime-types: text/html,application/xml,application/json # 设置压缩的数据类型
min-request-size: 2048 # 设置触发压缩的大小下限
- 日志级别
通过logging.level.xx=debug来设置日志级别。然而这个对Fegin客户端而言不会产生效果。因为@FeignClient注解修改的客户端在被代理时,都会创建一个新的Fegin.Logger实例。我们需要额外指定这个日志的级别才可以