当前位置: 首页 > news >正文

nacos 负载策略_Ribbon负载均衡

上一段代码中使用了简单的消费者-服务者模式提供了最简单的微服务,使用Nacos做服务注册中心。Ribbon是带负载均衡的Http客户端。

有两种方法实现:

方法一@EnableDiscoveryClient

@SpringBootApplication

public class NacosDiscoveryConsumerApplication {

public static void main(String[] args) {

SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);

}

@Bean

public RestTemplate restTemplate(){

return new RestTemplate();

}

}@RestController

public class HelloController {

@Autowired

RestTemplate restTemplate;

@Autowired

LoadBalancerClient loadBalancerClient;

@GetMapping("/hello")

public String HelloClient(String name){

ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-discovery-provider");

URI uri = serviceInstance.getUri();

return restTemplate.getForObject(uri + "hello?name=" + name, String.class);

}

}

LoadBalancerClient类的choose负责查找合适的服务ip。

方法二@EnableDiscoveryClient

@SpringBootApplication

public class NacosDiscoveryConsumerApplication {

public static void main(String[] args) {

SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);

}

@Bean

@LoadBalanced

public RestTemplate restTemplate(){

return new RestTemplate();

}

}@RestController

public class HelloController {

@Autowired

RestTemplate restTemplate;

@GetMapping("/hello")

public String HelloClient(String name){

return restTemplate.getForObject("http://nacos-discovery-provider/hello?name=" + name, String.class);

}

}

在注入RestTemplateBean时,同时添加@LoadBalanced注解,那么调用getForObject时就能有负载均衡的功能。

启动两个服务者;

一个是8086端口,一个是8085端口,然后调用消费者,可以看到轮询调用两个服务者:

如何替换负载均衡策略

Ribbon提供7种负载均衡策略可以选择:RandomRule随机策略

随机选择server

RoundRobinRule轮询策略

按照顺序选择server

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默认的负载均衡策略是ZoneAvoidanceRule,如果没有检查到Zone,那么实际使用的是RoundRobinRule。

如何能更换负载均衡策略呢?

注入一个实现IRule的bean即可@Configuration

public class NacosRule {

@Bean

public IRule iRule(){

return new NacosWeightRandomRule();

}

}

上面的NacosWeightRandomRule是自己实现Nacos权重负载均衡的策略,通过上面的配置可以修改Ribbon的负载均衡策略。

如果把上面的类放在@SpringBootApplication所在的包或子包下,那么所有的微服务远程访问都是用此负载均衡策略。

如果只想把此负载均衡策略使用在某个微服务的请求上如何做呢?

把上面的类放在放在@SpringBootApplication所在的包或子包外;

然后在启动类上添加以下注解:@RibbonClient(name = "nacos-discovery-provider", configuration = NacosRule.class)name,需要使用负载均衡策略的微服务名

configuration,负载均衡策略类

相关文章:

  • python文件传输模块_Python爱好者 socket模块传输文件 -
  • 红曲面怎么做_曲面屏是华为手机一大败笔?确实缺点很多,但华为为何钟爱呢?...
  • 高德地图 python面试_【高德地图面试|面试题】-看准网
  • tablayout 滚动模式_scrollview+tablayout实现联动
  • cboard企业版源码_数据可视化BI平台——CBoard的部署与使用(笔记整理)
  • 生活中的算法的实际举例_生活中的算法
  • pyecharts 绘制三维散点图_pyecharts
  • toolbar文本在最右侧_Toolbar中Menu的背景颜色、位置、同时显示文字等设置(亲测)...
  • linux 使用imageio.read 读图片出来为null_经典Linux面试题
  • gifcam使用缩小内存_GifCam怎么用?GifCam使用教程
  • openkruise 缩容_Kubernetes应用管理器OpenKruise
  • arduino as5048工作原理_Arduino 真的可以用来开发产品吗?分享一个电子工程师的Arduino使用心得分享!...
  • jquery 多个文本框赋值_jquery为input赋值方法总结
  • nslookup 包含在那个包中_nslookup详解(name server lookup)( 域名查询)
  • double 去掉小数点_怎么去掉double后面的零0及取得double的小数部分的有效位 | 学步园...
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • Apache Pulsar 2.1 重磅发布
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • HTTP请求重发
  • JAVA SE 6 GC调优笔记
  • js面向对象
  • Node 版本管理
  • PhantomJS 安装
  • spring boot 整合mybatis 无法输出sql的问题
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue-loader 源码解析系列之 selector
  • 从PHP迁移至Golang - 基础篇
  • 大整数乘法-表格法
  • 关于使用markdown的方法(引自CSDN教程)
  • 观察者模式实现非直接耦合
  • 检测对象或数组
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 深入 Nginx 之配置篇
  • 使用 Docker 部署 Spring Boot项目
  • 我与Jetbrains的这些年
  • mysql面试题分组并合并列
  • 第二十章:异步和文件I/O.(二十三)
  • 如何在招聘中考核.NET架构师
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​TypeScript都不会用,也敢说会前端?
  • (11)MSP430F5529 定时器B
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (TOJ2804)Even? Odd?
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (四)鸿鹄云架构一服务注册中心
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习日记)2024.01.09
  • (一)认识微服务
  • (转)Sql Server 保留几位小数的两种做法
  • ... 是什么 ?... 有什么用处?
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net CF下精确的计时器
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .Net各种迷惑命名解释
  • @Bean有哪些属性