客户端负载均衡Feign之四:Feign配置
Ribbon配置
在Feign中配置Ribbon非常简单,直接在application.properties中配置即可,如:
# 设置连接超时时间
ribbon.ConnectTimeout=500
# 设置读取超时时间
ribbon.ReadTimeout=5000
# 对所有操作请求都进行重试
ribbon.OkToRetryOnAllOperations=true
# 切换实例的重试次数
ribbon.MaxAutoRetriesNextServer=2
# 对当前实例的重试次数
ribbon.MaxAutoRetries=1
同样也可以指定服务配置,直接在application.properties中采用.ribbon.key=value的格式进行配置,如下:
# 设置针对user-service服务的连接超时时间
user-service.ribbon.ConnectTimeout=600
# 设置针对user-service服务的读取超时时间
user-service.ribbon.ReadTimeout=6000
# 设置针对user-service服务所有操作请求都进行重试
user-service.ribbon.OkToRetryOnAllOperations=true
# 设置针对user-service服务切换实例的重试次数
user-service.ribbon.MaxAutoRetriesNextServer=2
# 设置针对user-service服务的当前实例的重试次数
user-service.ribbon.MaxAutoRetries=1
在SpringCloudFeign中是默认打开重试机制,从上面的配置信息也可以看出,我们可以设置重试的次数。对于重试机制的测试,可以让服务提供方的方法延迟随机毫秒数来测试。
Hystrix配置
对于Hystrix的配置同样可以在application.properties中配置,全局配置直接使用默认前缀hystrix.command.default
,如
# 设置熔断超时时间
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
# 关闭Hystrix功能(不要和上面的配置一起使用)
feign.hystrix.enabled=false
# 关闭熔断功能
hystrix.command.default.execution.timeout.enabled=false
也可以直接对指定的接口进行配置,采用hystrix.command.default.<commandKey>
作为前缀,比如如/findAllUser
:
# 设置熔断超时时间
hystrix.command.findAllUser.execution.isolation.thread.timeoutInMilliseconds=10000
# 关闭熔断功能
hystrix.command.findAllUser.execution.timeout.enabled=false
对于重复的接口名会共用这一条Hystrix配置;
禁用Hystrix
上面的配置信息中,可以通过配置文件全局禁用Hystrix也可以指定接口禁用。我们也可以注解属性的方式禁用Hystrix;
- 构建一个关闭Hystrix的配置类
@Configuration
public class DisableHystrixConfiguration { @Bean
@Scope("prototype")
public Feign.Builder feignBuilder(){
return Feign.builder();
}
}
- 在
@FeignClient
注解中,通过configuration
参数引入上面实现的配置
@FeignClient(value = "USER-SERVICE",configuration = DisableHystrixConfiguration.class)
public interface UserRafactorService extends UserService {
}
服务降级配置
在Hystrix中我们可以直接通过@HystrixCommand注解的fallback参数进行配置降级处理方法,然而Feign对其进行封装,并提供了一种简单的定义方式:
1. 在之前的feign-consumer服务中创建一个UserServiceFallback类,该类实现UserService接口。这里对于哪个类接口的降级就实现哪个接口,
@Component
public class UserServiceFallback implements UserService {
@Override
public List<User> findAll() {
return null;
} @Override
public User finUserById(Long id) {
return new User(-1L,"error",0);
} @Override
public User findUserHeader(String name, Long id, Integer age) {
return new User(-1L,"error",0);
} @Override
public User insertUser(User user) {
return new User(-1L,"error",0);
}
}
- 然后再@FeignClient注解中指定服务降级处理类即可:
@FeignClient(value = "USER-SERVICE",fallback = UserServiceFallback.class)
- 在配置文件中开启Hystrix:
feign:
hystrix:
enabled: true
然后在USER-SERVICE服务中将某个接口设置延迟测试:
请求压缩
Spring Cloud Feign支持对请求和响应进行GZIP压缩,以提高通信效率,配置方式如下:
# 配置请求GZIP压缩
feign.compression.request.enabled=true
# 配置响应GZIP压缩
feign.compression.response.enabled=true
# 配置压缩支持的MIME TYPE
feign.compression.request.mime-types=text/xml,application/xml,application/json
# 配置压缩数据大小的下限
feign.compression.request.min-request-size=2048
日志配置
SpringCloudFeign为每一个FeignClient都提供了一个feign.Logger实例。可以根据logging.level.<FeignClient>
参数配置格式来开启Feign客户端的DEBUG日志,其中<FeignClient>
为Feign客户端定义接口的完整路径。如:
logging:
level:
com.wqh.feign.service.UserService: debug
然后再主类中直接加入Looger.Level的Bean
@Bean
public Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
这里也可以通过配置,然后在具体的Feign客户端来指定配置类实现日志。
日志级别有下面4类:
- NONE:不记录任何信息;
- BASIC:仅记录请求方法、URL以及响应状态码和执行时间;
- HEADERS:除了记录BASIC级别的信息外,还记录请求和响应的头信息;
- FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据等。
客户端负载均衡Feign之四:Feign配置的更多相关文章
- Spring Cloud负载均衡:使用Feign作客户端负载均衡
有了一篇服务端负载均衡后,再来一篇客户端负载均衡,客户端负载均衡很简单,无需在zuul中做多余配置(本示例不引入zuul),只需要在客户端进行Feign引入和配置即可. 准备工作很简单,实现客户端负载 ...
- 客户端负载均衡Feign之二:Feign 功能介绍
一.Ribboon配置 在Spring cloud Feign中客户端负载均衡是通过Spring cloud Ribbon实现的,所以我们可以直接通过配置Ribbon客户端的方式来自定义各个服务客户端 ...
- 客户端负载均衡Feign之一:申明式服务调用Feign入门示例
Spring Cloud提供了Ribbon和Feign作为客户端的负载均衡. 前面使用了Ribbon做客户端负载均衡,使用Hystrix做容错保护,这两者被作为基础工具类框架被广泛地应用在各个微服务的 ...
- SpringCloud微服务实战二:Spring Cloud Ribbon 负载均衡 + Spring Cloud Feign 声明式调用
1.Spring Cloud Ribbon的作用 Ribbon是Netflix开发的一个负载均衡组件,它在服务体系中起着重要作用,Pivotal将其整合成为Spring Cloud Ribbon,与其 ...
- SpringBoot(三) - Ribbon客户端负载均衡,Zuul网关,Config配置中心
1.Ribbon客户端负载均衡 1.1 依赖 1.2 配置信息 # feign默认加载了ribbon负载均衡,默认负载均衡机制是:轮询 # 负载均衡机制是添加在消费端(客户端)的,如果改为随机,指定服 ...
- springcloud 之Ribbon客户端负载均衡配置使用
pom.xml添加配置说明:这里服务注册与发现用的是Eureka,所以消费者端需要引入eureka,使用EurekaClient来调用服务 <dependency> <groupId ...
- Spring Cloud官方文档中文版-客户端负载均衡:Ribbon
官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_spring_cloud_netflix 文中例子我做了一些测试在:h ...
- spring cloud 使用ribbon简单处理客户端负载均衡
假如我们的multiple服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改 ...
- 第四章 客户端负载均衡:Spring Cloud Ribbon
spring cloud ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于Netflix Ribbon 实现.通过Spring Cloud 的封装,可以轻松的将面向服务的R ...
- 【SpringCloud微服务实战学习系列】客户端负载均衡Spring Cloud Ribbon
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让我们轻松地将面向服务的RES模板 ...
随机推荐
- ES最佳实践之分片使用优化
Elasticsearch最佳实践之分片使用优化 作者:老生姜 一.遇到的问题 与大多数分布式系统一样,Elasticsearch按照一定的Hash规则把用户数据切分成多个分片,然后打散到不同机器进行 ...
- java利用Comparator接口对自定义数组排序
import java.util.Arrays; import java.util.Comparator; public class MySort { public static void main( ...
- (13)自定意义标签和过滤器 (templatetags)
过滤器分内置和自定意义 PS:过滤器可以用在for循环和if判断后,但是标签不能使用在for循环和if判断后 内置过滤器: add(在模板中实现加减法) default(就是当传入的变量是False的 ...
- 20165313 《Java程序设计》第八周学习总结
教材学习总结 线程常用方法 1.start() 2.run()定义线程线程对象被调度之后所执行的操作 3.sleep(int millsecond),必须在try-catch语句块中调用sleep方法 ...
- 解决LNMP环境无法显示所有WordPress主题及无法编辑主题页面
解决方法: 第一.编辑/usr/local/php/etc/php.ini文件 第二.找到disable_functions这一行中,删除"scandir,"这一段脚本,然后保存这 ...
- 高性能kv存储之Redis、Redis Cluster、Pika:如何应对4000亿的日访问量?
一.背景介绍 随着360公司业务发展,业务使用kv存储的需求越来越大.为了应对kv存储需求爆发式的增长和多使用场景的需求,360web平台部致力于打造一个全方位,适用于多场景需求的kv解决方案.目前, ...
- root用户登录mysql后新建用户提示1045错误
执行以下命令查看root权限 show grants for 'root'@'localhost'; 如果没有显示with grant option,说明是root没有拥有新建授权用户的权限(为什么会 ...
- NYOJ 483 Nightmare 【广搜】+【无标记】
版权声明:长风原创 https://blog.csdn.net/u012846486/article/details/31032479 Nightmare 时间限制:1000 ms | 内存限制: ...
- 两个简单的API限流实现方案
1, Ngnix限流 Nginx在架构中起到请求转发与负载均衡器的作用.外部req首先到Nginx监听的80端口,然后Nginx将req交给到监听8080端口的APP服务器处理.处理结果再经由Ngin ...
- pri 知识点
pri github:https://github.com/prijs/pri 添加路由后动态导入,使用的是 react-loadable:https://github.com/jamiebuilds ...