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代码或属性 ...
随机推荐
- tab切换代码优化
上次的tab切换的代码里面有很多重复的代码,需要做做优化,把重复的代码用函数封装起来调用. 优化前: <script> //获取id封装成一个函数$()方便调用 function $(id ...
- Gym 101201G Maximum Islands (最大独立集)
题意:给定一个图,L代表陆地,W代表水,C表示不确定,问你最多有多少岛. 析:首先给定的L周围必须是是W,只有这样才是最优的,因为如果是L,那么还得有另外的W来包围,不是最优的,那么剩下的就剩下C了, ...
- 三)Wiring up jobs using triggers and the SchedulerFactoryBean
示例地址: https://github.com/witaste/quartz.git │ pom.xml │ └─src └─main ├─java │ └─cn │ └─zno │ └─job │ ...
- github push403错误的处理
如果没有什么别的问题的话,推荐使用SSH的方式.请参考:http://stackoverflow.com/questions/7438313/pushing-to-git-returning-erro ...
- UVALive - 6434 —(思维题)
题意:给出了你由n个数组成的序列,让你将这个序列分为成m个集合,使得每一个集合的最大值减最小值的差相加最小.(如果某集合只有一个数字,则最大值减最小值为0) . 思路:首先我们不难想到,最优的分配方法 ...
- 试题 F: 特别数的和 第十届蓝桥杯
试题 F: 特别数的和时间限制: 1.0s 内存限制: 512.0MB 本题总分: 15 分[问题描述]小明对数位中含有 2. 0. 1. 9 的数字很感兴趣(不包括前导 0),在 1 到40 中这样 ...
- Receiving Transaction Processor Conundrum
what would we do if we are faced with a situation to execute a receiving transaction in oracle ebusi ...
- solr特点一:高亮(highlighting)
高亮的配置 参数详细说明: hl.fl: 用空格或逗号隔开的字段列表.要启用某个字段的highlight功能,就得保证该字段在schema中是stored.如果该参数未被给出,那么就会高亮默认字段 s ...
- leetcode 罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D 和M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II ,即为两个并列的 1.1 ...
- ASP.net 居中
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...