目录
负载均衡组件Spring Cloud Ribbon(二)- 自定义Ribbon配置整合
负载均衡组件Spring Cloud Ribbon(二)- 自定义Ribbon配置整合
上面配置了一个简单的负载均衡,那如何自定义负载均衡的规则呢?要实现有两种方式
1)通过Java代码配置
2)通过配置文件中的属性去配置
在SpringCloud中,Ribbon默认的配置类是RibbonClientConfiguration。也可使用一个POJO自定义Ribbon的配置(自定义配置会覆盖默认配置)。这种配置是细粒度的,不同的Ribbon客户端可以使用不同的配置。
通过Java代码配置
创建一个Ribbon的配置类
package com.TransientBa.cloud.config;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* RibbonConfiguration class
* 该类不应该在主程序上下文的@ComponentScan中
*/
@Configuration
public class RibbonConfiguration {
@Bean
public IRule ribbonRule(){
return new RandomRule();
}
}
在创建测试配置
在创建一个空类用来选择应用指定的Ribbon配置类。
package com.TransientBa.cloud.config;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Configuration;
/**
* TestConfiguration class
* 使用RibbonClient注解来为特定name的Ribbon client定义配置
* configuration属性指向了刚刚我们自定义的RibbonConfiguration配置类
*/
@Configuration
@RibbonClient(name="microservice-provider-user",configuration = RibbonConfiguration.class)
public class TestConfiguration {
}
说明:
1)也可以不创建这个类,直接将注解@RibbonClient加到启动类中也是可以的;
启动服务测试
启动服务测试一下请求分布情况,依然访问http://localhost:8010/log-instance接口
说明:
1)可以看到日志显示请求被随机分发了。
2)需要注意的是:RibbonConfiguration类不能包含在主应用程序上下文的@ComponentScan中,否则该类中的配置信息就被所有的@RibbonClient共享。
3)所以可以看到目录的结构,SpringBoot默认扫描的位置在Application启动类的同级及下属子目录,我们将RibbonConfiguration类拿到了外面。
通过配置文件中的属性去自定义配置
上面通过Java代码进行了配置,这种方式要产生两个类,那有没有办法简化配置?
下面我们通过属性配置来达到同样的效果。删除上面两个添加的配置类,只需要在yml配置文件中添加:
microservice-provider-user:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
启动服务测试后效果同Java配置。到这里我们可以看出使用属性配置明显比Java配置简化的多。
==============================
QQ群:143522604
群里有相关资源
欢迎和大家一起学习、交流、提升!
==============================