SpringCloud学习笔记(三)

news2025/7/10 18:54:07

文章目录

  • SpringCloud学习笔记(一)
    • 1.Ribbon 概述
    • 2.负载均衡
    • 3.Ribbon 快速入门
      • 3.1 本次调用设计图
      • 3.2 项目搭建
      • 3.3 创建 provider-1和provider-2
      • 3.4 编写 provider-1 和 provider-2
      • 3.5 创建 consumer
      • 3.6 编写 consumer 的启动类
      • 3.7 编写 consumer 的 ConsumerController
      • 3.8 启动测试
    • 4.Ribbon 分析
      • 4.1 Ribbon 要做什么事情?
    • 5.如何修改默认的负载均衡算法
      • 5.1 修改 yml 配置文件(指定某一个服务使用什么算法)
      • 5.2 测试调用该服务(这里使用随机规则)
      • 5.3 配置此消费者调用任何服务都用某种算法
    • 6.Ribbon 的配置文件和常用配置
    • 7.Ribbon 总结(后面的代码中 不会出现 ribbon)

SpringCloud学习笔记(一)

1.Ribbon 概述

Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 NetflixRibbon 实现。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模版请求自动转换成客户端负载均衡的服务调用。 轮询 hash 权重 …简单的说 Ribbon 就是 netfix 公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon 客户端组件提供了一套完善的配置项,比如连接超时,重试等。

在 Spring Cloud 构建的微服务系统中, Ribbon 作为服务消费者的负载均衡器,有两种使用方式,一种是和 RestTemplate 相结合,另一种是和 OpenFeign 相结合。OpenFeign 已经默认集成了 Ribbon,关于 OpenFeign 的内容将会在下一章进行详细讲解。Ribbon 有很多子模块,但很多模块没有用于生产环境!

2.负载均衡

负载均衡,英文名称为 Load Balance(LB)http:// lb://(负载均衡协议) ,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如 Web 服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
在这里插入图片描述

3.Ribbon 快速入门

3.1 本次调用设计图

在这里插入图片描述

3.2 项目搭建

consumer 和 provider-1 和 provider-2 都是 eureka-client
注意这三个依赖是 eureka-client
注意 provider-1 和 provider-2 的 spring.application.name=provider
注意启动类的注解和配置文件的端口以及服务名称

3.3 创建 provider-1和provider-2

在这里插入图片描述
创建时候添加eureka Client的依赖和Web依赖。
修改端口号,不能相同。

3.4 编写 provider-1 和 provider-2

在这里插入图片描述同理provider-B也一样

在这里插入图片描述

3.5 创建 consumer

额外添加依赖:

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        <version>2.2.9.RELEASE</version>
</dependency>

3.6 编写 consumer 的启动类

在这里插入图片描述

@SpringBootApplication
@EnableEurekaClient
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

3.7 编写 consumer 的 ConsumerController

@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("testRibbon")
    public String consumerA(String providerName){
        String url="http://"+providerName+"/test";
        String result = restTemplate.getForObject(url, String.class);
        return result;
    }
}

3.8 启动测试

先启动注册中心服务。
在这里插入图片描述
访问页面
在这里插入图片描述刷新页面
在这里插入图片描述
可以看得出是通过轮询的方式实现负载均衡。

4.Ribbon 分析

4.1 Ribbon 要做什么事情?

先通过 “http://” + serviceId + “/info” 我们思考 ribbon 在真正调用之前需要做什么?
restTemplate.getForObject(“http://provider/info”, String.class);
想要把上面这个请求执行成功,我们需要以下几步

  1. 拦截该请求;
  2. 获取该请求的 URL 地址:http://provider/info
  3. 截取 URL 地址中的 provider
  4. 从服务列表中找到 key 为 provider 的服务实例的集合(服务发现)
  5. 根据负载均衡算法选出一个符合的实例
  6. 拿到该实例的 host 和 port,重构原来 URL 中的 provider
  7. 真正的发送 restTemplate.getForObject(“http://ip:port/info”,String.class)

5.如何修改默认的负载均衡算法

5.1 修改 yml 配置文件(指定某一个服务使用什么算法)

provider: # 提供者的服务名称 , 那么访问该服务的时候就会按照自定义的负载均衡算法
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
# 几种算法的全限定类名

5.2 测试调用该服务(这里使用随机规则)

在这里插入图片描述

5.3 配置此消费者调用任何服务都用某种算法

@Bean
public IRule myRule() {
// 指定调用所有的服务都用此算法
return new RandomRule();
}

6.Ribbon 的配置文件和常用配置

Ribbon 有很多默认的配置,查看 DefaultClientConfigImpl

ribbon: # 全局的设置
	eager-load:
		enabled: false # ribbon 一启动不会主动去拉取服务列表,当实际使用时才
去拉取 是否立即加载
http:
	client:
		enabled: false # 在 ribbon 最后要发起 Http 的调用调用,我们认为是
RestTemplate 完成的,其实最后是 HttpURLConnection 来完成的,这里面设置为 true ,
可以把 HttpUrlConnection->HttpClient
okhttp:
	enabled: false #HttpUrlConnection 来完成的,这里面设置为 true ,可以
把 HttpUrlConnection->OkHttpClient( 也是发 http 请求的,它在移动端的开发用的多 )
provider: # 提供者的服务名称 , 那么访问该服务的时候就会按照自定义的负载均衡算法
	ribbon:
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
# 修改默认负载均衡算法,几种算法的全限定类名
# NFLoadBalancerClassName: #loadBalance 策略
# NFLoadBalancerPingClassName: #ping 机制策略
# NIWSServerListClassName: # 服务列表策略
# NIWSServerListFilterClassName: # 服务列表过滤策略
ZonePreferenceServerListFilter 默认是优先过滤非一个区的服务列表

7.Ribbon 总结(后面的代码中 不会出现 ribbon)

Ribbon 是客户端实现负载均衡的远程调用组件,用法简单
Ribbon 源码核心:
ILoadBalancer 接口:起到承上启下的作用

  1. 承上:从 eureka 拉取服务列表
  2. 启下:使用 IRule 算法实现客户端调用的负载均衡

设计思想:每一个服务提供者都有自己的 ILoadBalanceruserService—》客户端有自己的 ILoadBalancer
TeacherService—》客户端有自己的 ILoadBalancer在客户端里面就是 Map<String,ILoadBalancer> iLoadBalancersMap<String,ILoadBalancer> iLoadBalancers 消费者端服务提供者的名称 value (服务列表 算法规则 )
如何实现负载均衡的呢?
iloadBalancer loadbalance = iloadBalancers.get(“user-service”)List servers = Loadbalance.getReachableServers();//缓存起来
Server server = loadbalance .chooseServer(key) //key 是区 id,–》IRule 算法chooseServer 下面有一个 IRule 算法
IRule 下面有很多实现的负载均衡算法
你就可以使用 eureka+ribbon 做分布式项目

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

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

相关文章

83.Django项目中使用验证码

1. 概述 ​ 验证码&#xff08;CAPTCHA&#xff09;是“Completely Automated Public Turing test to tell Computers and Humans Apart”&#xff08;全自动区分计算机和人类的图灵测试&#xff09;的缩写&#xff0c;是一种区分用户是计算机还是人的公共全自动程序。可以防止…

分布式节能聚类算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

MySQL隔离级别的底层理解(MVCC+锁)

MySQL事务的隔离级别和并发的关系 mysql是一个C/S架构的软件, 也就意味着, 同一个mysql服务器可能同时存在很多的clients集合来访问. 此时最重要的是什么? 并发性. 并发时候的安全. 并发和数据库安全性本来就是相互矛盾的。要保证更好的安全性最好的方式是什么? 完全舍弃并…

云原生系列 四【轻松入门容器基础操作】

✅作者简介&#xff1a; CSDN内容合伙人&#xff0c;全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云云 享专家博主&#xff0c;掘金后端评审团成员 &#x1f495;前言&#xff1a; 最近云原生领域热火朝天&#xff0c;那么云原生是什么&#xff1f;何为云原生…

最详细的Keycloak教程:Keycloak实现手机号、验证码登陆——(一)Keycloak的下载与使用

目录一、 简介二、Keycloak下载与启动三、配置国际化内容一、 简介 接触keycloak已经半个多月了&#xff0c;主要是为了用来集成现已有的项目&#xff0c;也是弄得头大&#xff0c;代码不负脱发人&#xff0c;也是有点小成果了&#xff0c;在这里把自己的这点小小经验分享给大…

CMOS IC功耗类型及其影响因素

目录 概述 开关功耗&#xff08;Switch Power&#xff09; 内部功耗&#xff08;Internal Power&#xff09; 漏电功耗&#xff08;Leakage Power&#xff09; 工艺库相关 开关功率相关信息 内部功耗相关信息 漏电功耗相关信息 例子 概述 该部分对IC功耗的类型进行介绍 先总体来…

安装黑苹果常见问题总结

黑苹果字体模糊&#xff1f; 由于macOS使用了HiDPi技术以达到更高的每英寸像素率&#xff0c;即缩放&#xff0c;因此普通显示器只要不是4k分辨率&#xff0c;安装黑苹果后一定会遇到字体模糊的问题&#xff0c;解决方法可以阅读我往期发布的文章。 为什么用iStat Menus无法检…

期末前端web大作业:用DIV+CSS技术设计的动漫网站——火影忍者6页 带报告

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 网页设计作业 | 动漫网页设计 | 动漫网页设计成品 | 动漫网页设计成品模板 | 简单漫画网页设计成品 | HTML期末大学生网页设计作业 HTML&#xff1a;结…

深度学习第四课——卷积神经网络(week 1)

目录 一、前言 1.1 卷积 1.2 其他滤波器 1.3 Padding 1.3.1 解释 1.3.2 填充多少像素的选择 1.4 卷积步长 1.5 三维卷积 1.6 单层卷积网络 1.7 深度卷积神经网络的一个示例 1.8 池化层 1.8.1 最大池化 1.8.2 平均池化 1.8.3 总结 1.9 卷积神经网络示例 1.10 为…

23种设计模式

1.创建型模式 ① 创建型模式的作用就是创建对象&#xff0c;说到创建一个对象&#xff0c;最熟悉的就是 new 一个对象&#xff0c;然后 set 相关属性 ② 但是很多场景下&#xff0c;需要给客户端提供更加友好的创建对象的方式&#xff0c;尤其是那种我们定义了类&#xff0c;但…

leetcode:644. 子数组最大平均数 II【浮点数二分 + 子数组最大平均值技巧】

目录题目截图题目分析ac code总结题目截图 题目分析 枚举铁超时&#xff0c; 10 ** -5考虑二分平均值需要同时考虑总和和长度能否只考虑一个考虑每个数num’ num - avg这样可以忽略长度猜一个guess_avg是否可能达到num’ -> num - avg_guess区间sum(num’) > 0说明其真…

Linux 开机运行sh 脚本 三种方法

一、修改开机启动文件​​​​​​​ /etc/rc.local&#xff08;或者/etc/rc.d/rc.local&#xff09; 1、编辑rc.local文件&#xff08;命令后面让得加&号&#xff0c;表示后台运行&#xff09; 2、最后修改rc.local文件的执行权限&#xff1a; chmod x /etc/rc.local二…

实践历练的力量

要让你的屁股和椅子建立起深刻的友谊来&#xff0c;要坚持下来。 掌握知识离不开实践和做&#xff0c;只有经历了这样的过程才能将知识转换为自己的。也才能真正明白在什么环境下需要什么样的知识。 解决问题。 真正的学习一定包括实践&#xff0c;而实践是更重要的学习。学…

【sfu】接收侧拼装H264 帧后的回调流程

sfu 基于webrtc协议栈,【sfu】rtc 入口 预先分配了资源,并创建了adpter模块和call模块。【webrtc】rtp包组帧 :涉及到收到rtp包到组帧、传递给Frame处理直到解码器的流程。帧就是从解码器导出的。我们只需要注册1个外部解码器就可以拿到编码后的H264 帧,给到其他流程处理。接…

【JVS低代码开发平台】支持纯手工配置的数据加工、处理、展现的数据仓库

数据智仓英文名称为Smart Data Warehouse&#xff0c;可简写为SDW。数据智仓是JVS整体企业数字化解决方案的核心能力&#xff0c;与JVS的低代码开发套件平级&#xff0c;如下图所示&#xff1a; 数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;为企业提供基于数据的…

SOLIDWORKS 2023新功能揭秘!升级版轻松找到材料明细表修改

SOLIDWORKS 2023版本已经与大家见面&#xff0c;今天众联亿诚继续和大家分享SOLIDWORKS 2023 工程图的亮点新功能之一&#xff1a;材料明细表的覆盖。 材料明细表的覆盖 SOLIDWORKS工程图是我们常用的功能之一。当采用断开链接模式修改材料明细表的内容时&#xff0c;修改的内容…

【强化学习论文合集】AAAI-2022 强化学习论文 | 2022年合集(二)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

【web前端期末大作业】HTML+CSS宠物狗静态网页设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

2.18 小红书的表情文案一键生成,原来这么简单【玩赚小红书】

想知道小红书的表情文案是怎么生成的&#xff0c;比如这种&#xff1a; 情人节走心 高调仪式感浪漫小 机&#xff01; 式秀恩爱&#xff0c;不如比比谁更走心&#xff01;❤️ EVERYDAY7️⃣彩⭐期裤 高浓度释放爱意讯号~ 今年情 节&#xff0c;大胆直接的爱意让他抱个 怀&…

【爬虫】Python爬取世界杯球员榜单并保存到excel经验分享

大家好 我是Yhen 今天给大家分享一下 如何爬取卡塔尔世界杯球员榜 数据来源&#xff1a;百度体育 https://tiyu.baidu.com/match/%E4%B8%96%E7%95%8C%E6%9D%AF/tab/%E7%90%83%E5%91%98%E6%A6%9C/current/0 文章目录一.需求分析二.思路分析三.代码实战四.源码获取一.需求分析…