前言

很多场景下,可能根据需要自定义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. 基于Web Service的客户端框架搭建四:终结篇

    前言 这是这个系列的终结篇,前面3个博客介绍了一下内容: 1.使用Http Post方式调用Web Service 2.客户端框架之数据转换层 3.客户端框架之代理层 框架结构 框架是基于C#的,在V ...

  2. zz如何让你的婚姻天长地久?

    如果天长地久意味着一列永不出轨的火车,下面有关婚姻生活的战略就像制定一张准确的运行时刻表.因为成功的婚姻并非源于机运,所谓的七年之痒也不是空穴来风.对那些已婚男人来说,他们需要计划——为了一年比一年过 ...

  3. centos环境下输入命令不能有中文那么我怎么插入中文数据到数据库

    centos环境下输入命令不能有中文那么我怎么插入中文数据到数据库 如下图: 首先查看是否安装了中文语言支持组件 yum grouplist 没有的话安装 yum install Chinese Su ...

  4. 前端福利之jQuery文字轮播特效(转)

    闲谈:离开学校那座象牙塔已经也有大半年的事件了,生活中不再充满了茫然只有忙碌.连续加班加点大半个月,做的活动项目终于算是告一段落了,而今天也将是考验其真正价值的时候,现在将这次开发中遇到的问题做一下总 ...

  5. swoole WebSocket 消息推送

    server.php <?php //连接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $r ...

  6. 深入浅出python系列(一)包与模块

    一.包 包是由一系列模块组成的,模块简单就说是一个.py文件.比如说,现在有一个数学功能组,可以计算加.减.乘.除.幂运算等等,假定把这几个功能分成几个模块,一个模块就是一个.py文件.由这些不同的模 ...

  7. Git config 配置文件

    一.Git已经在你的系统中了,你会做一些事情来客户化你的Git环境.你只需要做这些设置一次:即使你升级了,他们也会绑定到你的环境中.你也可以在任何时刻通过运行命令来重新更改这些设置. Git有一个工具 ...

  8. vc++ 不同对话框中传递信息的方法(基于自定义消息SendMessage) (转载)

    转载自:http://blog.csdn.net/myj0513/article/details/6827360 背景: 新建了一个基于对话框的MFC程序,在主对话框中添加tabcontrol控件,又 ...

  9. Array对象的创建及其操作方法

    一.创建数组,即实例化数组对象      有三种方式:1. new Array();                          2.new Array(size);               ...

  10. 深入jetty的使用详解

    简介: Jetty 是一个用 Java 实现.开源.基于标准的,并且具有丰富功能的 Http 服务器和 Web 容器,可以免费的用于商业行为.Jetty 这个项目成立于 1995 年,现在已经有非常多 ...