springcloud(六)-Ribbon配置自定义算法
前言
很多场景下,可能根据需要自定义Ribbon的配置,例如修改Ribbon的负载均衡规则等。Spring Cloud Edgware允许使用java代码或属性自定义Ribbon 的配置,两种方式等价。
Java代码定义
我们先说使用Java代码写配置类的方式定义负载均衡算法。
复制项目microservive-consumer-movie-ribbon,将ArtifactId修改为microservice-consumer-movie-ribbon-customizing。
1.创建Ribbon的配置类
@Configuration
public class RibbonConfiguration {
@Bean
public IRule ribbonRule() {
// 负载均衡规则,改为随机
return new RandomRule();
}
}
这里要说一下,很关键。
这个类一定不要放到启动类同目录或同目录的子目录下,也就是@SpringBootApplication注解的子注解@ComponentScan所能扫描到的地方。否则该类中的配置信息将被所有的@RibbonClient共享。
当然了,你要是就想放到@ConponentScan能扫描的目录下,你需要手动exclude掉,告诉springboot,不扫描它。
2.再创建一个空类,并在其上添加@Configuration注解和@RibbonClient注解。
@Configuration
@RibbonClient(name="microservice-provider-user",configuration=RibbonConfiguration.class)
public class TestConfiguration { }
测试
启动microservice-discovery-eureka.
启动两个或更多microservice-provider-user.
启动microservice-consumer-movie-ribbon-customizing
多次访问http://localhost:8082/log-user-instance,看控制台信息
2019-04-15 19:14:31.268 INFO 10592 --- [nio-8082-exec-9] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:14:31.436 INFO 10592 --- [nio-8082-exec-1] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:14:31.607 INFO 10592 --- [nio-8082-exec-3] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:14:31.776 INFO 10592 --- [nio-8082-exec-4] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:14:31.923 INFO 10592 --- [nio-8082-exec-7] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:14:32.081 INFO 10592 --- [nio-8082-exec-9] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:14:32.269 INFO 10592 --- [nio-8082-exec-1] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:14:32.437 INFO 10592 --- [nio-8082-exec-3] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:14:32.592 INFO 10592 --- [nio-8082-exec-4] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:14:32.776 INFO 10592 --- [nio-8082-exec-7] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:14:32.955 INFO 10592 --- [nio-8082-exec-9] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:14:33.138 INFO 10592 --- [nio-8082-exec-1] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:14:33.312 INFO 10592 --- [nio-8082-exec-3] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
没毛病!
配置方式
我们再说通过配置yml文件的方式。我的观点是,能用配置的方式,尽量不用Java代码!
改个名字先:microservice-consumer-movie-ribbon-customizing-properties
和上面的方式比较:把上面那俩Java类删咯。在application.yml文件中加上一段。
server:
port: 8082
eureka:
client:
healthcheck:
enabled: true
serviceUrl:
defaultZone: http://localhost:8083/eureka/
instance:
prefer-ip-address: true
spring:
application:
name: microservice-consumer-movie
# 表示对这个user的Ribbon Client的负载均衡设置为随机
# 如果去掉16行,下面当然往前移两格,表示对所有的设置为随机
microservice-provider-user:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
你看,就三行,还是配置方便,快捷。
测试
启动microservice-discovery-eureka
启动两个或多个microservice-provider-user实例
启动microservice-consumer-movie-ribbon-customizing-properties
多次访问http://localhost:8082/log-user-instance.看控制台
2019-04-15 19:27:32.866 INFO 12792 --- [nio-8082-exec-7] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:27:33.044 INFO 12792 --- [nio-8082-exec-8] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:33.370 INFO 12792 --- [nio-8082-exec-1] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:33.558 INFO 12792 --- [nio-8082-exec-3] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:33.746 INFO 12792 --- [nio-8082-exec-5] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:27:33.945 INFO 12792 --- [nio-8082-exec-7] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:34.129 INFO 12792 --- [nio-8082-exec-8] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:27:34.329 INFO 12792 --- [nio-8082-exec-1] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:34.521 INFO 12792 --- [nio-8082-exec-3] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:27:34.711 INFO 12792 --- [nio-8082-exec-5] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:27:34.895 INFO 12792 --- [nio-8082-exec-7] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:35.103 INFO 12792 --- [nio-8082-exec-8] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:35.289 INFO 12792 --- [nio-8082-exec-1] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:27:35.504 INFO 12792 --- [nio-8082-exec-3] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:35.705 INFO 12792 --- [nio-8082-exec-5] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:35.895 INFO 12792 --- [nio-8082-exec-7] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:36.081 INFO 12792 --- [nio-8082-exec-8] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:36.279 INFO 12792 --- [nio-8082-exec-1] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:36.481 INFO 12792 --- [nio-8082-exec-3] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:27:36.650 INFO 12792 --- [nio-8082-exec-5] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:27:36.863 INFO 12792 --- [nio-8082-exec-7] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:37.057 INFO 12792 --- [nio-8082-exec-8] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
2019-04-15 19:27:37.250 INFO 12792 --- [nio-8082-exec-1] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8084
2019-04-15 19:27:37.409 INFO 12792 --- [nio-8082-exec-3] c.i.cloud.controller.MovieController : microservice-provider-user:192.168.1.33:8081
还是没毛病!
代码下载地址:https://gitee.com/fengyuduke/my_open_resources/blob/master/ribbon-customizing&properties.zip
springcloud(六)-Ribbon配置自定义算法的更多相关文章
- 【SpringCloud】Ribbon如何自定义客户端配置和全局配置
起因 事情的起因是这样的,公司内部要实现基于Zuul网关的灰度路由,在上线时进行灰度测试,故需要配置业务微服务向Eureka注册的metadata元数据,和自定义Ribbon的负载规则达到只访问灰度服 ...
- springcloud(六):配置中心(一)
随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...
- springcloud(六):配置中心git示例
随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...
- springcloud(七):配置中心svn示例和refresh
上一篇springcloud(六):配置中心git示例留了一个小问题,当重新修改配置文件提交后,客户端获取的仍然是修改前的信息,这个问题我们先放下,待会再讲.国内很多公司都使用的svn来做代码的版本控 ...
- SpringCloud系列十一:自定义Feign
1. 回顾 上文我们讲解了如何为服务消费者配置Feign. 在Spring Cloud中,Feign的默认配置类是FeignClientsConfiguration,该类定义了Feign默认使用的编码 ...
- springcloud ribbon Finchley 版本,自定义算法
引用上一个项目,在原有的基础上进行更改,添加springcloud的内荣. eureka-server 和上一个springcloud eureka的一样,没有改动. 添加cloud-api pack ...
- SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)
1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...
- SpringCloud的Ribbon自定义负载均衡算法
1.Ribbon默认使用RoundRobinRule策略轮询选择server 策略名 策略声明 策略描述 实现说明 BestAvailableRule public class BestAvailab ...
- SpringCloud系列八:自定义Ribbon配置
1. 回顾 上文使用Ribbon实现了客户端侧的负载均衡.但是很多场景下,我们可能需要自定义Ribbon的配置,比如修改Ribbon的负载均衡规则. Spring Cloud允许使用Java代码或属性 ...
随机推荐
- Android 一些注意
半年没碰android,想给一个按钮写个click,硬是想不起来怎么搞,哎! 1.编码问题调整 2.引用框架问题 3.界面设计无法显示问题,需要调整设计界面的API Level 4.任意输入自动提示 ...
- struct 和union的区别
union ( 共用体):构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) struct ( 结构体 ):是一种构造类型 用途: 把不同的数据组合成一个整体——自定义数据 ...
- Codeforces758D Ability To Convert 2017-01-20 10:29 231人阅读 评论(0) 收藏
D. Ability To Convert time limit per test 1 second memory limit per test 256 megabytes input standar ...
- D3 数据可视化实战 笔记
学习真是件奇妙的事情.这本书我之前都看过,有些的知识点却完全没有印象. 总结:把用到的知识好好研究:平时可以了解其他技术的基础,把相关的资料和难点记录下来. javascript陷阱 1.变量类型 v ...
- 深海划水队项目---七天冲刺day1
团队会议: 团队成员的任务认领安排: 张兆敏:登录界面,游戏界面(包含游戏区.控制区.显示信息区). 乐滔:方块的形状.移动(向左或者向右)旋转(顺时针或者逆时针),方块的下落(包含硬着陆和软着陆), ...
- 安装配置BITS上传服务
IIS 6.0和IIS 7.0 支持安装BITS上传组件. 下面以IIS7.0为例安装配置bits上传服务. 1.安装 首先确定服务器已经按装IIS服务.依次打开服务管理器->功能->添加 ...
- layou split 属性
layou split:true - 显示侧分栏
- ASP.NET添加Mysql数据源
在ASP.NET的数据源控件上添加mysql数据库连接,首先需要在windows系统下添加mysql的数据源才能在vs中添加数据源 1.在控制面板下打开系统与安全-->打开管理工具-->点 ...
- webapi中session为null的解决方案
Session webapi中session为null的解决方案 在Global.asax里添加:开启Session功能(默认是不开启) 重写init方法 public class WebApiAp ...
- ceph: health_warn clock skew detected on mon的解决办法
造成集群状态health_warn:clock skew detected on mon节点的原因有两个,一个是mon节点上ntp服务器未启动,另一个是ceph设置的mon的时间偏差阈值比较小. 排查 ...