前言

很多场景下,可能根据需要自定义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配置自定义算法的更多相关文章

  1. 【SpringCloud】Ribbon如何自定义客户端配置和全局配置

    起因 事情的起因是这样的,公司内部要实现基于Zuul网关的灰度路由,在上线时进行灰度测试,故需要配置业务微服务向Eureka注册的metadata元数据,和自定义Ribbon的负载规则达到只访问灰度服 ...

  2. springcloud(六):配置中心(一)

    随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...

  3. springcloud(六):配置中心git示例

    随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...

  4. springcloud(七):配置中心svn示例和refresh

    上一篇springcloud(六):配置中心git示例留了一个小问题,当重新修改配置文件提交后,客户端获取的仍然是修改前的信息,这个问题我们先放下,待会再讲.国内很多公司都使用的svn来做代码的版本控 ...

  5. SpringCloud系列十一:自定义Feign

    1. 回顾 上文我们讲解了如何为服务消费者配置Feign. 在Spring Cloud中,Feign的默认配置类是FeignClientsConfiguration,该类定义了Feign默认使用的编码 ...

  6. springcloud ribbon Finchley 版本,自定义算法

    引用上一个项目,在原有的基础上进行更改,添加springcloud的内荣. eureka-server 和上一个springcloud eureka的一样,没有改动. 添加cloud-api pack ...

  7. SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)

    1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...

  8. SpringCloud的Ribbon自定义负载均衡算法

    1.Ribbon默认使用RoundRobinRule策略轮询选择server 策略名 策略声明 策略描述 实现说明 BestAvailableRule public class BestAvailab ...

  9. SpringCloud系列八:自定义Ribbon配置

    1. 回顾 上文使用Ribbon实现了客户端侧的负载均衡.但是很多场景下,我们可能需要自定义Ribbon的配置,比如修改Ribbon的负载均衡规则. Spring Cloud允许使用Java代码或属性 ...

随机推荐

  1. DB2日期转格式化字符串

    DB2  应该有个  TO_CHAR  的函数. 用来把 日期 转换为 字符串 1 2 3 4 5 6 7 8 9 10 db2 => SELECT db2 (cont.) =>   TO ...

  2. 使用WindowsFormsApplicationBase实现引导界面

    1.需要添加对Microsoft.VisualBasic 引用, 2.准备frmMain,frmSplash两个窗口 说明:        frmSplash在主线程上建立,但是在独立线程上进行消息循 ...

  3. Leader/Follower多线程网络模型介绍

    之前分享过<轻量级 web server Tornado代码分析>,介绍了目前我们采用nginx + tornado的方式搭建升级.配管.数据中心等各类服务组建客户端迭代体系.最近注意到, ...

  4. [label][JavaScript]读nowmagic - js词法作用域、调用对象与闭包

     原文链接:                 http://www.nowamagic.net/librarys/veda/detail/1305 作用域(scope) JavaScript 中的函数 ...

  5. Xamarin 技术解析

    Xamarin 是一套基于C#语言的跨平台移动应用开发工具,今年2月份微软宣布收购Xamarin,而后在4月份进行的Build大会上微软宣布将会在各个版本的Visual Studio中免费提供Xama ...

  6. ASP.NET Core2基于RabbitMQ对Web前端实现推送功能

    在我们很多的Web应用中会遇到需要从后端将指定的数据或消息实时推送到前端,通常的做法是前端写个脚本定时到后端获取,或者借助WebSocket技术实现前后端实时通讯.因定时刷新的方法弊端很多(已不再采用 ...

  7. 自己写一个图片按钮(XAML)

    有时需要用三张图片(正常状态,鼠标移上,鼠标按下)来作为一个按钮的样式,虽然这种做法不好,应该用矢量的方式制作样式,但有的时候还是需要这样做的. 每次都修改按钮的样式来实现这个做法,既麻烦又会生成大段 ...

  8. 更改kvm虚拟机磁盘大小

    kvm 虚拟机的磁盘大小可通过命令:qemu-img resize filename size 来改,要注意的是resize只支持raw格式的磁盘文件,如果想更改qcow2等格式的磁盘大小,需先用qe ...

  9. Tomcat不自动解压问题

    问题: 版本迭代上线,需要更换新的war包, 1.先将老的war和文件夹删除掉,再放入新的war到webapps中, 2.发现启动Tomcat后没有解压该war包, 3.需要先将server.xml中 ...

  10. Nuget~打包时添加powershell初始化脚本

    对于进行nuget打包时,有时我们需要添加一个配置文件,就是一些文本文件,而这些文件我们在网站发布时需要同时复制到输出目录,否则会出现文件丢失的问题,我们在打包时通过添加powershell脚本来解决 ...