SpringCloud-day06-Ribbon负载均衡

6.3.Ribbon负载均衡

为了模拟负载均衡,启动多个服务提供者,只是端口号不一样,实际生产中只需要部署在不同的服务器上即可,

我们这里以修改端口号的方式来模拟,所以新建模块ticket-provider-6002,ticket-provider-6003 与 ticket-provider-6001一样,唯一不同的只是端口号不一样

模块建立好后按照如下步骤配置:

注意:本质上相当于复制两个ticket-provider-6001修改端口号即可

第一步:pom.xml ,每个pom.xml的依赖都与ticket-provider-6001的一样,直接复制ticket-provider-6001的即可

第二步:复制 6001 的application.yml到 6002 和 6003,修改端口和实例名称,直观样式如下

第三步:6002,6003都复制6001的代码,启动类名称对应的改下;

  为了测试演示用,在服务提供中添加一行数据,用于标注服务来源

配置完成!

第四步:测试

先启动:先启动三个eureka集群,在启动三个服务提供者,最后启动消费者。 

先测试服务提供者:

http://localhost:6001/ticket/list

http://localhost:6002/ticket/list

http://localhost:6003/ticket/list

看看是否有结果;

再测试下 eureka:

http://eureka7001.wfd360.com:7001/

 出现如下效果说明服务集群正常:

 

 最后测试消费者:

http://localhost/ticket/list 

多刷新几次 看控制台或者页面显示的预设置的信息,我们看到 有默认的轮询策略,访问对应的服务提供者;

但是这种默认的轮询策略肯定是不能满足实际需求的,比如有3个服务提供者,突然挂了一个,这样的话,默认轮询 ,总有1/3的概率访问失败;

注意在测试的时候可以手动的停止一个服务提供者,然后在访问消费者,刚开始总有1/3的概率失败,而继续刷新则不会出现,因为ribbon不会再去访问那个停掉的服务

所以我们看下ribbon默认给我们提供的策略有哪些;

 Ribbon框架按照不同需求,已经为我们实现了许多实现了IRule接口的实现类,适用于常用的负载均衡规则。以下规则能够实现大部分负载均衡需求的应用场景,如果有更复杂的需求,可以自己实现IRule。

代码中实现负载均衡策略

服务消费端 SpringCloudConfig配置类  

指定IRule实现:

/**
     * 自定义轮询算法
     * 忽略哪些短路的服务器,并选择并发数较低的服务器。
     *
     * @return
     */
    @Bean
    public IRule myRule() {
        return new BestAvailableRule();
    }

这里我们演示用 BestAvailableRule,其它大家可以自行测试;

用法非常简单;

Ribbon就说到这里,

springCloud课程与代码下载:https://www.cnblogs.com/newAndHui/p/13210228.html

完美!

原文地址:https://www.cnblogs.com/newAndHui/p/10622851.html