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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 快速学习自定义 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)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
17天前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
87 7
|
15天前
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
2月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
45 2
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
2月前
|
负载均衡 Java 开发者
Ribbon框架实现客户端负载均衡的方法与技巧
Ribbon框架为微服务架构中的客户端负载均衡提供了强大的支持。通过简单的配置和集成,开发者可以轻松地在应用中实现服务的发现、选择和负载均衡。适当地使用Ribbon,配合其他Spring Cloud组件,可以有效提升微服务架构的可用性和性能。
28 0
|
3月前
|
负载均衡 应用服务中间件 Linux
在Linux中,Nginx如何实现负载均衡分发策略?
在Linux中,Nginx如何实现负载均衡分发策略?
|
3月前
|
缓存 负载均衡 算法
在Linux中, LVS负载均衡有哪些策略?
在Linux中, LVS负载均衡有哪些策略?
|
5月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
114 2
|
4月前
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
47 1
|
4月前
|
运维 负载均衡 算法
SLB与NGINX的异同是什么
SLB与NGINX的异同是什么
361 2