Spring Cloud Alibaba Ribbon负载均衡器

文章目录

  • 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:8848logging.level.com.hb = debug

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

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

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

3.1 验证

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

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

在这里插入图片描述
在启动类上加入@EnableDiscoveryClient,即可在服务中查看到对应的服务

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.创建自定义的Rule

4.1 MyRule()

@Component
@Slf4j
public class MyRule extends AbstractLoadBalancerRule {@Autowiredprivate NacosDiscoveryProperties nacosDiscoveryProperties;@Autowiredprivate NacosServiceManager nacosServiceManager;private static AtomicInteger count = new AtomicInteger(0);@Override@SneakyThrowspublic 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);}}@Overridepublic 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.rhkb.cn/news/142027.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提高接口自动化测试效率:使用 JMESPath 实现断言和数据提取!

前言 做接口自动化&#xff0c;断言是比不可少的。如何快速巧妙的提取断言数据就成了关键&#xff0c;当然也可以提高用例的编写效率。笔者在工作中接触到了JMESPath&#xff0c;那到底该如何使用呢&#xff1f;带着疑惑一起往下看。 JMESPath是啥&#xff1f; JMESPath 是一…

ARM Soc内部总线

由于soc架构&#xff0c;把常用外设&#xff08;控制器&#xff09;集成到芯片内部&#xff0c;所以需要一种总线协调ARMcore与这些内部外设的通信&#xff0c;于是有了APB and AHB以及AXi这种片上总线。 同时要注意与常说的PC时代总线区分开&#xff1a; CPU总线&#xff08;…

【PMP/软考】软件需求的三个主要层次:业务需求、用户需求和功能需求解释及实例解析

简述 当进行需求分析时&#xff0c;通常着重考虑三个主要层次&#xff1a;业务需求、用户需求和功能需求。业务需求关注项目与组织战略目标的一致性&#xff0c;用户需求明确最终用户的期望&#xff0c;而功能需求定义具体的系统功能和特性。这三个层次为项目管理和软件工程提…

工业蒸汽量预测(速通三)

工业蒸汽量预测&#xff08;三&#xff09; 特征优化1特征优化的方法1.1合成特征1.2特征的简单变换1.3用决策树创造新特征1.4特征组合 模型融合1模型优化1.1模型学习曲线1.2模型融合提升技术1.3预测结果融合策略1.4其他提升方法 特征优化 1特征优化的方法 可以通过合成特征、…

【LeetCode】力扣364.周赛题解

Halo&#xff0c;这里是Ppeua。平时主要更新C&#xff0c;数据结构算法&#xff0c;Linux与ROS…感兴趣就关注我bua&#xff01; 1.最大二进制奇数 &#x1f349;题目&#xff1a; &#x1f349;例子&#xff1a; &#x1f349; 题解: 首先看题目,最大二进制奇数,在一个二…

MQ - 31 基础功能: 优先级队列的设计

文章目录 导图概述什么是优先级队列如何设计实现优先级队列业务实现优先级队列的效果内核支持优先级队列RabbitMQ 中优先级队列的实现总结导图 概述 当我们需要在业务中对消息设置优先级,让优先级高的消息能被优先消费,此时就需要用到消息队列中优先级队列的特性。 为了了解…

前后端分离vue简介

vue简介 vue是一个渐进式js框架&#xff0c;用于构建用户界面&#xff0c;其主要特点是易学易用、轻量、灵活和高效。Vue.js由前Google工程师尤雨溪&#xff08; Evan You&#xff09;在2014年创建&#xff0c;它的核心库只关注视图层&#xff0c;是一款非常优秀的MVVM框架&…

Azure AD混合部署,通过 Intune 管理设备,实现条件访问

一、设备同步到AAD上面 1、配置 AAD Connect 2、选择 3、下一步 4、配置本地 企业管理员 5、配置成功 二、通过 组策略把设备同步到 Intune 上面 1、创建一条组策略 2、设置 &#xff08;1&#xff09;计算机配置 → 管理模板 → Windows 组件 → MDM → 使用默认 Azure AD …

增强for循环和一般for循环的对比使用

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。个人B站主页热爱技术的小郑 &#xff0c;视频内容主要是对应文章的视频讲解形式。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘…

spring源码解析——IOC之自定义标签解析

概述 之前我们已经介绍了spring中默认标签的解析&#xff0c;解析来我们将分析自定义标签的解析&#xff0c;我们先回顾下自定义标签解析所使用的方法&#xff0c;如下图所示&#xff1a; 我们看到自定义标签的解析是通过BeanDefinitionParserDelegate.parseCustomElement(ele…

【赘婿国漫】从网络文学,到热播动漫,种马文属性或许是最大优点

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 《赘婿》第一季结束以来&#xff0c;有关该剧的讨论就一直没有停止过。这部由网络小说改编而来的国漫&#xff0c;虽然收获了不俗的收视成绩&#xff0c;但也引发了许多争议。在原著作者的控制范围之外&#x…

智慧银行:数字化金融时代的引领者

在当今数字化的时代&#xff0c;金融行业正经历着一场前所未有的变革。传统的银行模式已经不再适用&#xff0c;取而代之的是智慧银行的新兴概念。智慧银行不仅仅是数字化的银行&#xff0c;更是一个全新的金融服务范式&#xff0c;将科技与金融相结合&#xff0c;为客户提供更…

技术干货 | JMeter实现参数化的4种方式

参数化释义 什么是参数化&#xff1f;从字面上去理解的话&#xff0c;就是事先准备好数据&#xff08;广义上来说&#xff0c;可以是具体的数据值&#xff0c;也可以是数据生成规则&#xff09;&#xff0c;而非在脚本中写死&#xff0c;脚本执行时从准备好的数据中取值。 参数…

方法的重载

方法的重载 在同一个类中&#xff0c;定义了多个同名的方法&#xff0c;这些同名方法名具有同样的功能每个方法具有不同的参数类型或者参数个数&#xff0c;这些同名的方法就构成了重载关系。 简记&#xff1a;同一个类中&#xff0c;方法名相同&#xff0c;参数不同的方法。与…

编程每日一练(多语言实现):判断偶数

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现 一、实例描述 利用单条件单分支选择语句判断输入的一个整数 是否是偶数。 运行程序&#xff0c;输入一个 整数18&#xff0c; 然后按回车键&#xff0c;将提示该数字是偶数…

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 B: 双子数

[蓝桥杯 2023 国 B] 双子数 试题 B: 双子数 【问题描述】 若一个正整数 x x x 可以被表示为 p 2 q 2 p^2 \times q^2 p2q2&#xff0c;其中 p p p、 q q q 为质数且 p ≠ q p \neq q pq&#xff0c;则 x x x 是 一个 “双子数”。请计算区间 [ 2333 , 233333333333…

1.算法——数据结构学习

算法是解决特定问题求解步骤的描述。 从1加到100的结果 # include <stdio.h> int main(){ int i, sum 0, n 100; // 执行1次for(i 1; i < n; i){ // 执行n 1次sum sum i; // 执行n次} printf("%d", sum); // 执行1次return 0; }高斯求和…

vue3 - 按需导入使用Element Plus图标、iconify图标、本地SVG/PNG图标

GitHub Demo 地址 在线预览 vue3 - 按需导入使用Element Plus图标、iconify图标、本地SVG/PNG图标 [GitHub Demo 地址](https://github.com/iotjin/jh-vue3-admin)[在线预览 ](https://iotjin.github.io/jh-vue3-admin) 一、iconify插件安装使用效果图 二、通过自动导入使用ic…

基于微信小程序的音乐播放器设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

在虚拟机上安装win10/ubuntu的教程

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、下载软件资源 1、首先下载虚拟机Vmware_Pro17软件并正确安装&#xff1a;网盘链接 2、然后下载操作系统的镜像文件&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 二、在虚拟机上安装ubuntu系统 1…