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代码或属性 ...
随机推荐
- JVM 垃圾回收- 转载 知识碎片
最近关注了一下垃圾回收的问题,想了解一下JVM 关于方法区的垃圾回收机制,找了几篇文章,不同的文章从不同角度讲述了一下,嗯... 拼凑起来 记录一下, 有些未验证正确性... JVM 方法区 当JVM ...
- 为什么不加WWW的域名能访问,前面加了WWW后不能访问?
解决方法:我的主机记录没有添加www,添加后就可以访问了
- java 内存 线程 类 vm分析工具
JMeter.Jconsole.JVMStat
- express4.x Request对象获得参数方法小谈【原创】
最近看完慕课网 “node.js 建站攻略”后, 对mongodb 操作有了进一步认识, 为了进一步巩固该数据库知识, 于是使用学到的知识搭建一个最简单的mongoDemo. 搭建完成后已放到Gith ...
- ISE、vivado、QuartusII调用notepad++、UE汇总(整理)
我已经用惯了notepad++编写Verilog代码,很喜欢这款编辑器,功能真的非常强大.所以,当需要对vivado.ISE或quartus ii中的工程进行Verilog代码上的编写或修改时,只需双 ...
- R12.1.3 patch9239090
参考文档:Oracle E-Business Suite Release 12.1.3 Readme [ID 1080973.1]1.调整参数_disable_fast_validate=TRUEpg ...
- 咏南CS开发框架新的界面风格
咏南CS开发框架新的界面风格 这种风格完全和WINDOWS桌面一样,符合用户的操作习惯. 我的桌面的图标和WINDOWS桌面一样分为二类:1)快捷方式 2)文件夹. 如果快捷方式较多,看得人眼花缭乱 ...
- [Erlang28]使用匿名函数灵活组合不同的case
cowboy_http.erl里面的date1/2 启示: 以前一般写case里都是这样子: date1(Date) -> case month1(Date) of {error,badarg} ...
- SQL SERVER 查找锁信息
通过系统的存储过程 sp_who 或 sp_who2 可以查找出所有的锁信息, 但是看不出是哪个表, 什么语句 当使用 sp_who 或 sp_who2 查找锁信息的时候, 有个 spid 信息, ...
- leetcode 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...