springcloud-Ribbon-负载均衡组件

时间:2022-12-14 21:00:52

Ribbon负载均衡

1.Ribbon简介

ribbin是Netflix发布的负载均衡器,有助于控制http和tcp客户端的行为,为ribbon配置服务提供者列表后,ribbon就可以基于某种负载均衡算法,自动的帮助服务消费者去请求。ribbon提供了很多的负载均衡算法例如

  • RoundRobinRule(轮询算法)
  • RandomRule(随机算法)
  • AvailabilityFilteringRule():会先过滤由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
  • WeightedResponseTimeRule():根据平均响应的时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够会切换到WeightedResponseTimeRule
  • RetryRule():先按照RoundRobinRule的策略获取服务,如果获取失败则在制定时间内进行重试,获取可用的服务。
  • BestAviableRule():会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

在springCloud中,当ribbon和Eureka配和使用时ribbon可以自动获取服务注册列表,并基于负载均衡算法,请求其中的一个服务提供实例

springcloud-Ribbon-负载均衡组件

在消费者与服务者之间做了一个Nginx代理,有效的分发请求到同一个服务者集群,如果将ribbon搭建在服务者一方,没有任何作用。

2.为消费者整合ribbon

1.ribbon和springcloud的启动器

注意:如果已经引入了spring-cloud-starter-eureka依赖,其中已经包含了spring-cloud-starter-ribbon,所以不需要再次引入

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
2.ribbon整合RestTemplate

整合只需要在RestTemplate配置类添加注解:@LoadBalanced,就可以实现负载均衡

@Configuration
public class RestTemplateConf {
@Bean
@LoadBalanced
RestTemplate getRestTemplate(){
return new RestTemplate();
}
3.消费者控制器

测试时,注入LoadBalancerClient作为调用测试

@RestController
@RequestMapping("/query")
public class ClientController { @Autowired
private RestTemplate restTemplate; @Autowired
LoadBalancerClient loadBalancerClient; @RequestMapping("/load")
public void loadBalanceTest(String name){
IRule iRule; //该接口管控ribbon负载均衡策略实现类
ServiceInstance instance = loadBalancerClient.choose("EUREKA-PROVIDER");
String host = instance.getHost();
int port = instance.getPort();
URI uri = instance.getUri();
System.out.println(host);
System.out.println(port);
System.out.println(uri);
}
}
服务者集群1的控制器
@RestController
@RequestMapping("/test")
public class TestController { @RequestMapping("/test1")
public String test(String name){
return "xixixi 8763 :"+name;
}
}
服务者集群2的控制器
@RestController
@RequestMapping("/test")
public class TestController { @RequestMapping("/test1")
public String test(String name){
return "xixixi 8764 :"+name;
}
}
4.验证负载均衡

访问:http://localhost:8762/query/load?name=hahahaha

得到结果如下:

springcloud-Ribbon-负载均衡组件

因为ribbon默认的实现类是轮询策略,如果要修改如下↓

3.自定义ribbon配置

在消费者配置文件天添加如下内容,将负载均衡策略指向其他实现类

HI-SERVICE.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

还有其他实现类如下:

springcloud-Ribbon-负载均衡组件

springcloud-Ribbon-负载均衡组件的更多相关文章

  1. SpringCloud Ribbon 负载均衡 通过服务器名无法连接的神坑一个

    一,问题 采取eureka集群.客户端通过Ribbon调用服务,Ribbon端报下列异常 java.net.UnknownHostException: SERVICE-HI java.lang.Ill ...

  2. SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)

    1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...

  3. spring-cloud&colon; eureka之:ribbon负载均衡自定义配置(二)

    spring-cloud: eureka之:ribbon负载均衡自定义配置(二) 有默认配置的话基本上就是轮询接口,现在我们改用自定义配置,同时支持:轮询,随机接口读取 准备工作: 1.eureka服 ...

  4. SpringCloud学习&lpar;4&rpar;——Ribbon负载均衡

    Ribbon概述 SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. 简单的说, Ribbon是Netflix发布的开源项目, 主要功能是提供客户端软 ...

  5. SpringCloud的入门学习之概念理解、Ribbon负载均衡入门

    1.Ribbon负载均衡,Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端.负载均衡的工具. 答:简单的说,Ribbon是Netflix发布的开源项目,主要功能 ...

  6. SpringCloud:Ribbon负载均衡

    1.概述 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端       负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客 ...

  7. 四(2)、springcloud之Ribbon负载均衡

    2.Ribbon负载均衡 ​ Ribbon在工作时分成两步第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server. 第二步再根据用户指定的策略,在从server取到的 ...

  8. SpringCloud学习笔记(五):Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均衡的工具 .(重点:客户端) 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提 ...

  9. SpringCloud微服务实战二&colon;Spring Cloud Ribbon 负载均衡 &plus; Spring Cloud Feign 声明式调用

    1.Spring Cloud Ribbon的作用 Ribbon是Netflix开发的一个负载均衡组件,它在服务体系中起着重要作用,Pivotal将其整合成为Spring Cloud Ribbon,与其 ...

  10. SpringCloud与微服务Ⅵ --- Ribbon负载均衡

    一.Ribbon是什么 Sping Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户 ...

随机推荐

  1. mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap

    这个错误基本都是mapper.xml有重复生成的代码

  2. 在类成员函数后面加const

    在看开源代码时,经常会看到在类的成员函数后面加const,之前了没有太关注过,近来闲来无事,就想起这件事,网上查了一下,大概明白了是怎么回事,这里引用CSDN愽文里的段话:“编译器会自动给每一个函数加 ...

  3. hdu3065 ac自动机

    病毒侵袭持续中 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  4. 前端入门17-JavaScript进阶之作用域

    声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...

  5. MySQL数据库需进行修改密码问题解决方案

    两种方式可供大家进行参考: 第一种: 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1.给root加个密码pass123: 首先在DOS下进入目录mysql\bin,然 ...

  6. CentOS7下搭建FastDfs(V5&period;11)&plus;Keepalived分布式集群部署

    FastDfs介绍 http://kb.cnblogs.com/page/82280/ 1.准备 系统 CentOS7 最小化安装. #VIP虚拟IP 10.1.6.218 #Keepalived 1 ...

  7. 大数据入门第十七天——storm上游数据源 之kafka详解(二)常用命令

    一.kafka常用命令 1.创建topic bin/kafka-topics. --replication-factor --zookeeper mini1: // 如果配置了PATH可以省略相关命令 ...

  8. json转化的时候如何忽略某些属性字段值

    一.有时候在将对象或list对象转化为json的时候,我们可能不需要所有的属性值,这就需要我们去过滤掉这些属性了 我下面说两种比较流行的json包如何来忽略某些属性值 二. 使用jaskson包 1. ...

  9. SD卡 模拟SPI总线控制流程

    SD卡为移动设备提供了安全的,大容量存储解决方法.它本身可以通过两种总线模式和MCU进行数据传输,一种是称为SD BUS的4位串行数据模式,另一种就是大家熟知的4线SPI Bus模式.一些廉价,低端的 ...

  10. Unicode与UTF-8互转(c语言和lua语言)

    1. 基础 1.1 ASCII码 我们知道, 在计算机内部, 全部的信息终于都表示为一个二进制的字符串. 每个二进制 位(bit)有0和1两种状态, 因此八个二进制位就能够组合出 256种状态, 这被 ...