Spring Cloud Alibaba Ribbon负载均衡器

news2024/12/25 15:25:36

文章目录

  • Ribbon 负载均衡器
  • 环境搭建
    • 1.依赖
    • 2.配置
    • 3.修改其默认的负载均衡策略
      • 3.1 验证
    • 4.创建自定义的Rule
      • 4.1 MyRule()
      • 4.2 在配置config类中配置
    • 5.饥饿加载
    • 6.我只想访问不想被别的访问

Ribbon 负载均衡器

背景
Ribbon 是一个用于客户端负载均衡的开源库,它是 Netflix 开源的一部分,目前由 Spring Cloud 托管和维护。Ribbon 的主要作用是在微服务架构中管理客户端之间的负载均衡。
作用
作为一个负载均衡器,Ribbon 可以将客户端发起的请求分发到多个服务提供者实例中,以实现负载均衡和高可用性。它可以根据配置的负载均衡策略,在请求发起时选择一个合适的服务提供者实例,使请求能够均匀地分布到不同的实例上,从而提高系统的性能和可扩展性。

负载均衡策略

RoundRobinRule:轮询策略,依次选择每个服务提供者实例。
RandomRule:随机策略,随机选择一个服务提供者实例。
WeightedResponseTimeRule:根据平均响应时间和实例权重进行选择。
BestAvailableRule:优先选择可用性最好的实例。
ZoneAvoidanceRule:避免选择故障区域的实例。
此外,Ribbon 还支持自定义负载均衡策略,通过实现 IRule 接口可以编写自定义的负载均衡规则。
拓展
在 Spring Cloud 中,通过引入 spring-cloud-starter-netflix-ribbon 依赖,可以方便地使用 Ribbon 进行客户端负载均衡。
需要注意的是,从 Spring Cloud 2020 年版本开始,官方推荐使用 Spring Cloud LoadBalancer 替代 Ribbon 进行客户端负载均衡。因此,在最新的项目中,建议使用 Spring Cloud LoadBalancer 来实现负载均衡的功能。

环境搭建

(上一篇采用的搭建环境的方法)传送至上一篇
在之前的基础上需要加入一行新的配置即可
如果新建一个项目加入下方依赖即可

spring boot 版本 2.3.11.RELEASE
对应采用的springcloud

 <properties>
        <java.version>1.8</java.version>
        <spring.cloud.version>Hoxton.SR8</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
    </properties>

1.依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.配置

配置 application.properties

spring.application.name=ribbon-a
server.port = 3030
#Nacos服务发现注册中心
spring.cloud.nacos.discovery.server-addr=192.168.14.3:8848

logging.level.com.hb = debug

3.修改其默认的负载均衡策略

轮询 ——> 随机 【ps:其他的也可自行设置】
配置config文件修改默认 策略

@Configuration
public class MyRuleConfig {
    @Bean
    public IRule rule(){
        return new RandomRule();
    }
}

3.1 验证

开启两个nacos,都在统一命名空间下,一个打包以cmd 运行,一个idea运行
1.打包文件
在这里插入图片描述

2.进入该文件夹中#
在这里插入图片描述
3.,记得打开的时候进入 target目录下
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.创建自定义的Rule

4.1 MyRule()

@Component
@Slf4j
public class MyRule extends AbstractLoadBalancerRule {
    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;
    @Autowired
    private NacosServiceManager nacosServiceManager;

    private static AtomicInteger count = new AtomicInteger(0);


    @Override
    @SneakyThrows
    public Server choose(Object key) {

        String group = this.nacosDiscoveryProperties.getGroup();
        DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer)getLoadBalancer();
        String name = loadBalancer.getName();
        NamingService namingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
        List<Instance> instances = null;
        instances = namingService.selectInstances(name, group, true);
        if (CollectionUtils.isEmpty(instances)) {
            log.warn("no instance in service {}", name);
            return null;
        }
        Instance maxInstance = instances.stream().max(Comparator.comparing(Instance::getWeight)).get();
        Instance minInstance = instances.stream().min(Comparator.comparing(Instance::getWeight)).get();
        int count2 = count.addAndGet(1);
        int mod = count2 % 4; //取模运算  5,10,15,20,25 ...
        if (mod == 0) {
            log.debug("count={},mod={},使用min",count2, mod);
            return new NacosServer(minInstance);
        } else {
            log.debug("count={},mod={},使用max",count2, mod);

            return new NacosServer(maxInstance);
        }
    }


    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }
}

4.2 在配置config类中配置

下方是访问4次三次调用权重最大的,一次访问权重最小的
在这里插入图片描述
结果
在这里插入图片描述
也可以在peroperties文件中配置还可以配置全局的但是在我这个版本不行 ,这里只配置啦命名空间为nacos-a的

 nacos-a.ribbon.NFLoadBalancerRuleClassName=com.hb.rule.MyRule

5.饥饿加载

在进行服务调用的时候,如果网络情况不好,第一次调用会超时。
Ribbon默认懒加载,意味着只有在发起调用的时候才会创建客户端。
开启饥饿加载,解决第一次调用慢的问题:

ribbon:
eager-load:
# 开启ribbon饥饿加载
enabled: true
# 配置order-service使用ribbon饥饿加载,多个使用逗号分隔
clients: order-service

开启饥饿加载会在系统加载类的过程中,与连接池进行链接

6.我只想访问不想被别的访问

application.properties 配置文件中加入这个即可
spring.cloud.nacos.discovery.register-enabled=true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生容器平台——新华资产数字化转型加速器

新华资产管理股份有限公司&#xff08;以下简称“新华资产”&#xff09;于2006年5月经中国保险监督管理委员会批准、7月3日正式挂牌成立&#xff0c;是国内首批专业保险资产管理机构。2020年上半年&#xff0c;公司管理的资产规模突破万亿元人民币&#xff0c;投资收益水平居行…

Gin学习记录4——Controller和中间件

一. Controller 用不同的Controller可以实现业务的分类&#xff0c;不同类型的请求可以共用同一套中间件 1.1 单文件Controller 几乎等同于函数封装&#xff0c;直接将ctrl的代码写入到一个文件里然后调用&#xff1a; package adminimport ("net/http""git…

天猫健康“小补点”掀起养生新趋势,燕窝、自在水搭着喝双倍补

长时间对着电脑、一坐就是一天、想运动却挤不出时间……这几乎是大部分职场人的常态。为了守护健康&#xff0c;许多职场人开始探索便捷、有效的养生方式。 顺应这一需求&#xff0c;天猫健康发起“带薪养生小补点”活动&#xff0c;携手新加坡健康品牌余仁生、元气森林旗下品…

爬虫 — Scrapy 框架(二)

目录 一、Scrapy 核心文件1、spider2、Request3、构造 post 请求4、response 二、案例三、Scrapy 下载中间件1、执行顺序2、使用方法3、Download Middlewares 默认方法4、代理 IP4.1、工作原理4.2、分类4.3、查看 IP 地址4.4、常用代理 四、Scrapy 爬虫中间件五、Scrapy 下载图…

基础课-解析几何

1.平面直角坐标系 两点A(x1,y1)与B(x2,y2)之间的距离: 2.两点斜率公式 3.点到直线的距离 平行线之间的距离 4.平面直线方程的几种形式 点斜式 点P(x0,y0),斜率为k的直线方程:y-y0k(x-x0) 5.圆

会员管理系统H5-01会员开卡

我们前边7篇文章讲解的是PC端的功能&#xff0c;还需要为商家提供一套移动端的后台管理程序。在微搭中&#xff0c;移动端的后台程序我们可以使用H5进行开发&#xff0c;开发完毕后可以启用登录&#xff0c;这样管理员就可以在手机上进行操作。 01 创建应用 登录微搭后台&…

企业选择预测性维护解决方案的常见问题和PreMaint的策略

预测性维护技术在现代制造业中扮演着越来越重要的角色&#xff0c;有助于提高设备可靠性、降低维护成本并最大程度地减少停机时间。然而&#xff0c;一些企业在选择预测性维护解决方案时仍存在一些常见问题和误解。在这篇文章中&#xff0c;我们将探讨一些常见问题&#xff0c;…

Python与数据分析--Matplotlib-1

目录 1.Matplotlib库函数导入 2.简单尝试绘图 3.绘制多条折线图 4.绘制多种颜色风格曲线 5.图片内容文本操作实例 6.图例设置实例 7.坐标轴设置实例 1.Matplotlib库函数导入 #导入matplotlib库 import matplotlib as mpl import matplotlib.pyplot as plt #平常一般用第…

手把手教你前端 NodeJs 常用技术和第三方库使用详细教程(每周更新中)

dotenv 加载环境变量 dotenv是一个用于在Node.js项目中加载环境变量的库。它允许你将环境变量存储在一个名为.env的文件中&#xff0c;并在你的应用程序中轻松访问这些变量。 dotenv 官方网站&#xff1a;https://www.dotenv.org/docs 要使用dotenv&#xff0c;你需要首先在你…

(2023,微调节,多纵横比训练,细化模型)SDXL:用于高分辨率图像合成的改进的潜在扩散模型

SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 改进稳定扩散 2.1 架构与规模 …

Python基础数据结构入门必读指南

更多资料获取 作者主页&#xff1a;涛哥聊Python 个人网站&#xff1a;涛哥聊Python 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享的是Python中常见的数据结构。 1.数组 含义&#xff1a;数组是一种有序的数据结构&#xff0c;其中的元素可以按照索引来访问。数组…

DMNet复现(二)之模型篇:Density map guided object detection in aerial image

以前用Swin Transformer Tiny训练了40epoch的&#xff0c;官方用的Faster RCNN&#xff0c;这里先用Swin Transformer Tiny进行测试。 模型训练 采用基于MMDetection的框架Swin Transformer Tiny进行训练&#xff0c;训练方法可参考官方教程。 融合检测 Global Image 检测 …

无涯教程-JavaScript - SEC函数

描述 SEC函数返回Angular的割线。 语法 SEC (number)争论 Argument描述Required/OptionalNumberNumber is the angle in radians for which you want the secant.Required Notes 数字的绝对值必须小于2 ^ 27 如果Angular为度,则将Angular乘以PI()/180或使用RADIANS函数将…

彻底学会Unity中UGUI中UI元素自适应问题

彻底学会Unity中UGUI中UI元素自适应问题 包会的简单版教程 狂飙模式&#xff1a; 经过自我进化学习&#xff0c;终于参悟。看完这个教程&#xff0c;你也可以&#xff01; 1.扫盲UGUI的理解&#xff1a; Unity3d 中的UI都是画在画布上的。就像画一幅画&#xff0c;首先我们需…

iPhone NFC 设置教程(门禁卡/公交卡/校园卡等等)

苹果手机如何开启NFC功能呢&#xff1f;相信不少小伙伴都对iPhone手机里的NFC用法都不太了解。尽管小米、华为、荣耀、一加、oppo、vivo等安卓手机的NFC使用已经满大街了&#xff0c;不仅功能齐全而且快捷安全&#xff0c;但是这一功能在苹果手机上还很鸡肋&#xff0c;因为它对…

DBSCAN聚类的Python 实现

一、说明 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff09;聚类是一种基于密度的聚类算法。它能够根据数据点的密度来将数据划分为不同的类别&#xff0c;并可以自动识别离群点。DBSCAN聚类算法的核心思想是将密度高的数据点划分为…

MongoDB——关于NumberLong处理大整数

1、问题 MongoDB根据某个Long类型ID查询数据查不出来 db.getCollection(school_work_section).find({school_work_section_id:577199363866206209}); 2、解决办法 Long类型的需要在NumberLong的对象里加上双引号才能查出来 db.getCollection(school_work_section).find({sc…

初识C语言——详细入门一(系统性学习day4)

目录 前言 一、C语言简单介绍、特点、基本构成 简单介绍&#xff1a; 特点&#xff1a; 基本构成&#xff1a; 二、认识C语言程序 标准格式&#xff1a; 简单C程序&#xff1a; 三、基本构成分类详细介绍 &#xff08;1&#xff09;关键字 &#xff08;2&#xf…

搭建ELK+Filebead+zookeeper+kafka实验

一、ELKFilebeadzookeeperkafka架构 第一层&#xff1a;数据采集层&#xff08;Filebeat&#xff09; 数据采集层位于最左边的业务服务集群上&#xff0c;在每个业务服务器上面安装了filebead做日志收集&#xff0c;然后把采集到的原始日志发送到kafkazookeeper集群上。 第二…

文件拷贝【 使用字节流完成文件的复制(支持一切文件类型的复制)】

需求&#xff1a; 把某个视频复制到 E:\\videocopy\\new.mp4 思路&#xff1a; 根据 数据源 创建字节输入流对象根据 目的地 创建字节输出流对象读写数据&#xff0c;复制视频释放资源 可以拷贝 视频 &#xff0c;图片 &#xff0c;文本.txt 等文件 package com.csdn.d2_byte_…