SpringCloudAlibaba【Ribbon】学习记录

SpringCloudAlibaba【Ribbon】学习记录

`


一、Ribbon是什么?

Ribbon是Netflix开源的一款用于客户端负载均衡的软件工具,它在集群中为各个客户端的通信提供了支持,有助于控制HTTP和TCP客户端的行为,提供了很多负载均衡的算法,例如轮询,随机等,同时也可以实现自定义的算法。在Spring Cloud 构建的微服务中,Ribbon作为服务消费者的负载均衡器,有两种使用方式,一种是与RestTemplate相结合,另一种是与Feign相结合。
ribbon有7种负载均衡策略可供选择:
RandomRule 随机策略 随机选择server
RoundRobinRule 轮询策略 按照顺序选择server(ribbon默认策略)
RetryRule 重试策略 在一个配置时间段内,当选择server不成功,则一直尝试选择一个可用的server
BestAvailableRule 最低并发策略 逐个考察server,如果server断路器打开,则忽略,再选择其中并发链接最低的server
AvailabilityFilteringRule 可用过滤策略 过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值)
ResponseTimeWeightedRule 响应时间加权重策略 根据server的响应时间分配权重,响应时间越长,权重越低,被选择到的概率也就越低。响应时间越短,权重越高,被选中的概率越高,这个策略很贴切,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间
ZoneAvoidanceRule 区域权重策略 综合判断server所在区域的性能,和server的可用性,轮询选择server并且判断一个AWS Zone的运行性能是否可用,剔除不可用的Zone中的所有server

二、使用Ribbon

springAlibaba中有两种方式进行集成ribbon,一种是通过注解配置,一种是通过yml文件的配置
先复制之前的order-nacos项目更名为order-ribbon目录结构如下:
在这里插入图片描述

1.使用注解的方式进行配置ribbon

1.创建RibbonRandomRuleConfig,我这里选用的是随机策略,注意不要与主启动类放在同一包下否则不生效

package com.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RibbonRandomRuleConfig {
    // 方法名一定要叫iRule
    @Bean
    public IRule iRule(){
        return new RandomRule();
    }
}

2.在主启动类上进行相应配置,name表示你调用服务的名称,configuration是填写你ribbon的配置类
在这里插入图片描述

2.使用yml的方式进行配置ribbon

1.首先注释掉主启动类是的注解
在这里插入图片描述
2.在yml中通过stock-service:
ribbon:
NFLoadBalancerRuleClassName:
来配置ribbon

server:
  port: 8030
  #应用名称(nacos将会把该名称当成服务名称)
spring:
  application:
    name: order-service
  cloud:
    nacos:
        server-addr: 127.0.0.1:8848
        discovery:
          username: nacos
          password: nacos
          namespace: public
stock-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

3.查看效果

将order-ribbon和stock-nacos启动起来,为了方便演示复制一个stock-nacos更改端口号
在这里插入图片描述
在这里插入图片描述
再次启动配置的stock-nacos,访问接口,随机调用stock-nacos服务
在这里插入图片描述
在这里插入图片描述

三、自定义Ribbon

在rule下创建CutomRule继承AbstractLoadBalancerRule实现自己的策略

package com.config.rule;

import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;

import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @author huangshengsong
 */
public class CustomRule extends AbstractLoadBalancerRule {
    //初始化配置
    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }

    @Override
    public Server choose(Object o) {
        ILoadBalancer loadBalancer = this.getLoadBalancer();
        //获得当前服务请求的实
        List<Server> reachableServers = loadBalancer.getReachableServers();
        int random = ThreadLocalRandom.current().nextInt(reachableServers.size());
        Server server = reachableServers.get(random);
//        if (server.isAlive()){
//            return null;
//        }
        return server;
    }
}

通过yml文件配置比较方便
在这里插入图片描述
启动项目运行成功
在这里插入图片描述

四、loadbalancer

1. 什么是Spring Cloud LoadBalancer

Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代
Ribbon。
Spring官方提供了两种负载均衡的客户端:
RestTemplate
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问
远程Http服务的方法,能够大大提高客户端的编写效率。默认情况下,RestTemplate默认依赖
jdk的HTTP连接工具。
WebClient
WebClient是从Spring WebFlux 5.0版本开始提供的一个非阻塞的基于响应式编程的进行Http请
求的客户端工具。它的响应式编程的基于Reactor的。WebClient中提供了标准Http请求方式对
应的get、post、put、delete等方法,可以用来发起相应的请求

2. RestTemplate整合LoadBalancer

1.引入依赖

将原本的ribbon依赖移除,添加LoadBalancer依赖,注意的是添加loadbalancer依赖必须要有springcloud的依赖,我这里在父工程里引入了cloud的依赖

  <!--添加nacos依赖-->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
             <exclusions>
                 <!--将ribbon排除-->
                 <exclusion>
                     <groupId>org.springframework.cloud</groupId>
                     <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
         <!--添加loadbanlance依赖-->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-loadbalancer</artifactId>
             <version>2.2.1.RELEASE</version>
         </dependency>

注意: nacos-discovery中引入了ribbon,需要移除ribbon的包
如果不移除,也可以在yml中配置不使用ribbon

在这里插入图片描述
最后启动项目查看结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值