开发者学堂课程【微服务框架 Spring Cloud 快速入门:自定义 Ribbon 的负载均衡策略(上)】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/614/detail/9357
自定义 Ribbon 的负载均衡策略(上)
内容介绍
一.主启动类添加@RibbonClient
二.注意配置细节
三.步骤
四.自定义规则深度解析
一、主启动类添加 @RibbonClient
@RibbonClient 注解给跟 Ribbon 有一定关系,Ribbon 是客户端的基础,在主启动类添加这个类,而不占用 Ribbon 默认的类,在启动该微服务的时候就能去加载自定义 Ribbon 配置类,从而使配置生效,形如:
@RibbonClient(name=”MICRSERVICELOUD-DEPT”,confiuration=MySelfRule,class)
当针对谁用,就套给谁用,当针对”MICRSERVICELOUD-DEPT”这个微服务名词时,在”MyselfRule”里面赋给算法,这是自定义的轮询规则。
现在需要”MyselfRule”这个类,只要能实现IRule这个接口,就符合了一种负载均衡算法。
二.注意配置细节
官方文档明确给出警告:
这个自定义配置类不能放在 @ComponentScan 所扫描的当前包下以及子包下,否则自定义的这个配置类就会被所有的 Ribbon 客户端所共享,也就是说达不到特殊化定制的目的了,其中自定义配置类就是”MyselfRule”类,不能和主体类占一块,因为主体类有一个类上面有一个叫”@SpringBootApplication”注解,里面带有@ComponentScan 这个注解,也就是说,定义的的路径不能跟带有”@ComponentScan”注解的同包或者子包下,换句话说,定义的”MyselfRule”就不能在”com.atguigu.springcloud”这个包及其子包下,因为这个包的子包下有带有”@ComponentScan”注解的类。“@SpringBootApplication”这个注解应标在主启动类的下边,主启动类是在”com.atguigu.springcloud”这个包下面,所以不能放在下面,只能新建一个包。
代码:
@Configuration
@RibbonClient(name=“foo”,configuation=FooConfiguation.class)
public class TestConfiguation{
}
当测试配置对”foo”这个微服务使用 FooConfiguration.class 这样一个自定义的配置,官网就给出了这样的注意:
The FooConfiguration has to be @Configuration but take care that it is not in a @ComponentScan
意思是:这个自定义配置类不能放在 @ComponentScan 所扫描的当前包下以及子包下。
三.步骤
1.新建package com.atguigu.myrule
(1)如图:
(2) 新建自定义Robbin规则类
注意,在MyselfRule 类上面要有 @Configuration 和 @Bean 这两个注解:
代码:
@Configuration
Public class MyselfRule
{
@Bean
Public IRule myRule()
{
Return new RandomRule();//Ribbon
默认是轮询,自定以为随机。
}
}
在该微服务启动的时候就能去加自定义 Ribbon 配置类,从而使配置生效。
2.修改主启动类
代码:
public class DeptConsumer80_App
{
Public static void main(String[] args)
{
SpringApplication,run(DeptConsumer80_App.class,args);
}
}
3. 测试结果:
{"deptno": 1, " dname":"开发部", "db_source" :"clouddb01"}
刷新一次:
{"deptno" : 1, " dname":"开发部", "db_source" :"clouddb03"}
刷新两次:
{"deptno" : 1, " dname":"开发部", "db_source" :"clouddb02"}
得出结论:发现每次”clouddb01”每次刷新都会变化,说明我们设置的随机生效了。