在上篇Spring Cloud Alibaba中我们创建了一个article-center项目,现在创建一个poeple-center项目,具体流程参考上篇文章,就修改二个地方,一个是application.yml中的server.port。还有一个就是spring.application.name。
现在开始使用Ribbon,在article-center项目中创建一个API接口
现在来修改people-center项目
创建一个配置类
创建一个测试类
然后启动二个项目,在浏览器访问:localhost:8082/ribbonTest
现在来看看Ribbon的组成
首先看下负载均衡规则,Ribbon默认使用的是轮询策略,我们可以看下IRule这个接口
有这么多的实现类,如果默认的负载均衡策略不满足我们的需求怎么办呢??我们可以进行配置选择我们想要的负载均衡策略。
有二种方式:
注解方式:
1)创建一个配置类,但是这个配置类的位置一定要在启动类之外,否则会有问题(这里涉及到父子上下文的问题),我们可以选择我们想要的负载均衡策略
2)然后在创建一个配置类,这个配置类是在启动类包以内了,需要让Spring扫描
@Configuration
//只针对一个微服务配置
//@RibbonClient(name = "content-center",configuration = RibbonConfig.class)
//针对所有微服务配置
@RibbonClients(defaultConfiguration = RibbonConfig.class)
public class ContentRibbonConfig {
}
配置方式: 只需要在配置文件application.yml配置下面这段代码就行
#使用配置文件方式使用Ribbon自定义负载均衡规则
content-center: //微服务名称
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
最后对二种方式进行以下总结
-
使用java代码配置:
-
优点:基于代码,更加灵活
-
缺点:有父子上下文的小坑,线上修改得重新打包
-
基于配置:
-
优点:易上手,配置更加直观,线上修改无需重新打包,优先级更高
-
缺点:极端情况下没有java代码配置灵活
-
尽量使用 配置文件形式配置,而且最好使用统一的配置,比如都用配置文件,或者都用java代码配置
最后还有一个关于Ribbon饥饿加载的问题,就是在第一次请求的一个微服务会很慢,之后请求就会快一点,因为Ribbon默认是懒加载,只有在第一次去请求这个微服务才会去加载,这时候我们开启Ribbon的饥饿加载。
ribbon:
eager-load:
#需要开启饥饿加载的微服务列表,多个微服务使用格式: xxx,xxx,xxx 用逗号隔开
clients: content-center
enabled: true