Spring Cloud Alibaba(整合Ribbon)

213 阅读2分钟

在上篇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