自定义 Ribbon 的负载均衡策略(上)|学习笔记

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 快速学习自定义 Ribbon 的负载均衡策略(上)

开发者学堂课程【微服务框架 Spring Cloud 快速入门自定义 Ribbon 的负载均衡策略(上)】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/614/detail/9357


自定义 Ribbon 的负载均衡策略(上)

 

内容介绍

一.主启动类添加@RibbonClient

二.注意配置细节

三.步骤

四.自定义规则深度解析

 

一、主启动类添加 @RibbonClient

@RibbonClient 注解给跟 Ribbon 有一定关系,Ribbon 是客户端的基础,在主启动类添加这个类,而不占用 Ribbon 默认的类,在启动该微服务的时候就能去加载自定义 Ribbon 配置类,从而使配置生效,形如:

@RibbonClient(name=”MICRSERVICELOUD-DEPT”,confiuration=MySelfRule,class)

当针对谁用,就套给谁用,当针对”MICRSERVICELOUD-DEPT”这个微服务名词时,在”MyselfRule”里面赋给算法,这是自定义的轮询规则。

现在需要”MyselfRule”这个类,只要能实现IRule这个接口,就符合了一种负载均衡算法。

 

二.注意配置细节

官方文档明确给出警告:

这个自定义配置类不能放在 @ComponentScan 所扫描的当前包下以及子包下,否则自定义的这个配置类就会被所有的 Ribbon 客户端所共享,也就是说达不到特殊化定制的目的了,其中自定义配置类就是”MyselfRule”类,不能和主体类占一块,因为主体类有一个类上面有一个叫”@SpringBootApplication”注解,里面带有@ComponentScan 这个注解,也就是说,定义的的路径不能跟带有”@ComponentScan”注解的同包或者子包下,换句话说,定义的”MyselfRule”就不能在”com.atguigu.springcloud”这个包及其子包下,因为这个包的子包下有带有”@ComponentScan”注解的类。“@SpringBootApplication”这个注解应标在主启动类的下边,主启动类是在”com.atguigu.springcloud”这个包下面,所以不能放在下面,只能新建一个包。

代码:

@Configuration

@RibbonClient(name=“foo”,configuation=FooConfiguation.class)

public class TestConfiguation{

}

当测试配置对”foo”这个微服务使用 FooConfiguration.class 这样一个自定义的配置,官网就给出了这样的注意:

The FooConfiguration has to be @Configuration but take care that it is not in a @ComponentScan

意思是:这个自定义配置类不能放在 @ComponentScan 所扫描的当前包下以及子包下。

 

三.步骤

1.新建package com.atguigu.myrule

(1)如图:

 image.png

(2) 新建自定义Robbin规则类

注意,在MyselfRule 类上面要有 @Configuration 和 @Bean 这两个注解:

代码:

@Configuration

Public class MyselfRule

{

@Bean

Public IRule myRule()

{

Return new RandomRule();//Ribbon默认是轮询,自定以为随机。

}

}

在该微服务启动的时候就能去加自定义 Ribbon 配置类,从而使配置生效。

2.修改主启动类

代码:

public class DeptConsumer80_App

{

Public static void main(String[] args)

{

SpringApplication,run(DeptConsumer80_App.class,args);

}

}

3. 测试结果:

{"deptno": 1, " dname":"开发部", "db_source" :"clouddb01"}

刷新一次:

{"deptno" : 1, " dname":"开发部", "db_source" :"clouddb03"}

刷新两次:

{"deptno" : 1, " dname":"开发部", "db_source" :"clouddb02"}

得出结论:发现每次”clouddb01”每次刷新都会变化,说明我们设置的随机生效了。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
负载均衡 Java Nacos
Ribbon负载均衡
Ribbon负载均衡
27 1
Ribbon负载均衡
|
1月前
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
58 5
|
9天前
|
负载均衡 Java Nacos
常见的Ribbon/Spring LoadBalancer的负载均衡策略
自SpringCloud 2020版起,Ribbon被弃用,转而使用Spring Cloud LoadBalancer。Ribbon支持轮询、随机、加权响应时间和重试等负载均衡策略;而Spring Cloud LoadBalancer则提供轮询、随机及Nacos负载均衡策略,基于Reactor实现,更高效灵活。
23 0
|
3月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
4月前
|
存储 设计模式 缓存
OpenFeign集成Ribbon负载均衡-过滤和选择服务核心实现
该文章主要介绍了如何在OpenFeign中集成Ribbon以实现负载均衡,并详细分析了Ribbon中服务选择和服务过滤的核心实现过程。文章还涉及了Ribbon中负载均衡器(ILoadBalancer)和负载均衡策略(IRule)的初始化方式。
OpenFeign集成Ribbon负载均衡-过滤和选择服务核心实现
|
4月前
|
缓存 负载均衡 Java
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
文章标题为“OpenFeign的Ribbon负载均衡详解”,是继OpenFeign十大可扩展组件讨论之后,深入探讨了Ribbon如何为OpenFeign提供负载均衡能力的详解。
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
|
3月前
|
负载均衡 Java 开发者
Ribbon框架实现客户端负载均衡的方法与技巧
Ribbon框架为微服务架构中的客户端负载均衡提供了强大的支持。通过简单的配置和集成,开发者可以轻松地在应用中实现服务的发现、选择和负载均衡。适当地使用Ribbon,配合其他Spring Cloud组件,可以有效提升微服务架构的可用性和性能。
39 0
|
12天前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
33 3
|
6月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
126 2
|
5月前
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
97 1