栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Ribbon:负载均衡(基于客户端)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ribbon:负载均衡(基于客户端)

文章目录
  • 1. Ribbon
  • 2. Ribbon作用
  • 3. 集成Ribbon
    • 3.1 修改springcloud-consumer-dept-80 子模块 【服务消费者】
    • 3.2 添加依赖
    • 3.3 配置文件
    • 3.4 在主启动器上添加@EnableEurekaClient,开启Eureka
    • 3.5 在配置类中配置负载均衡实现RestTemplate
    • 3.5 修改控制类DeptConsumerController.java,通过服务名动态获取服务地址
    • 报错
  • 4. 更换负载均衡算法
    • 4.1 使用已定义算法

1. Ribbon
  • Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。
  • 简单的说,Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将 Netflix 的中间层服务连接在一起。Ribbon 的客户端组件提供一系列完整的配置项,如:连接超时、重试等。简单的说,就是在配置文件中列出 LoadBalancer (简称LB:负载均衡) 后面所有的及其,Ribbon 会自动的帮助你基于某种规则 (如简单轮询,随机连接等等) 去连接这些机器。我们也容易使用 Ribbon 实现自定义的负载均衡算法!
2. Ribbon作用
  • LB,即负载均衡 (LoadBalancer) ,在微服务或分布式集群中经常用的一种应用。
  • 负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA (高用)。
  • 常见的负载均衡软件有 Nginx、Lvs 等等。
  • Dubbo、SpringCloud 中均给我们提供了负载均衡,SpringCloud 的负载均衡算法可以自定义。
  • 负载均衡简单分类:
    • 集中式LB
      • 即在服务的提供方和消费方之间使用独立的LB设施,如Nginx(反向代理服务器),由该设施负责把访问请求通过某种策略转发至服务的提供方!
    • 进程式 LB
      • 将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选出一个合适的服务器。
      • Ribbon 就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址!
3. 集成Ribbon

Ribbon 就属于进程内LB,它只是一个类库,集成于消费方进程

3.1 修改springcloud-consumer-dept-80 子模块 【服务消费者】

工程见:https://blog.csdn.net/qq_44058265/article/details/120667761

3.2 添加依赖

在pom.xml添加Ribbon和Eureka

  • Ribbon需要从Eureka服务中心获取到服务提供方的地址
        

        
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-ribbon
            2.2.9.RELEASE
        

        
        
            org.springframework.cloud
            spring-cloud-starter-eureka
            1.4.7.RELEASE
        
3.3 配置文件
#Eureka配置
eureka:
  client:
    register-with-eureka: false # 不向 Eureka注册自己
    service-url: # 从三个注册中心中随机取一个去访问
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
3.4 在主启动器上添加@EnableEurekaClient,开启Eureka
@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(DeptConsumer_80.class,args);
    }

}
3.5 在配置类中配置负载均衡实现RestTemplate
@Configuration
public class ConfigBean {
    @Bean
    @LoadBalanced //配置负载均衡实现RestTemplate
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}
3.5 修改控制类DeptConsumerController.java,通过服务名动态获取服务地址
  • SPRINGCLOUD-PROVIDER-DEPT 服务名 (服务模块配置文件中spring.application.name)
  • 服务器部署在集群,Ribbon会随机一个注册中心访问
    //Ribbon:我们这里的地址,应该是一个变量,通过服务名来访问
    //private static final String REST_URL_PREFIX = "http://localhost:8001";
    private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";
报错

测试时出现了版本问题,报错No instances available for XXX
解决参见: https://blog.csdn.net/qq_44058265/article/details/120753792

4. 更换负载均衡算法 4.1 使用已定义算法
  • IRule:
    • RoundRobinRule 轮询策略
    • RandomRule 随机策略
    • AvailabilityFilteringRule : 会先过滤掉,跳闸,访问故障的服务对剩下的进行轮询
    • RetryRule : 会先按照轮询获取服务~,如果服务获取失败,则会在指定的时间内进行,重试
@Configuration
public class ConfigBean {
    @Bean
    public IRule myRule() {
        return new RandomRule();//使用随机策略
        //return new RoundRobinRule();//使用轮询策略
        //return new AvailabilityFilteringRule();//使用轮询策略
        //return new RetryRule();//使用轮询策略
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号