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

 

posted @   风雨渡客  阅读(730)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示