Springcloud笔记(4)-客户端负载均衡Ribbon

Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,不需要独立部署,几乎存在于每一个springcloud构建的微服务和基础设施中。
微服务间调用,API网关的请求转发都通过Ribbon实现。

负载均衡

通常所说的负载均衡都是指的服务端负载均衡,包括硬件和软件,如软件的nginx。而ribbon是一个客户端负载均衡,客户端负载均衡中,所有客户端节点维护自己要访问的服务端清单,与服务注册中心配合完成。springcloud的服务治理框架,默认会整合ribbon,如Eureka。

在微服务架构中使用客户端负载均衡调用两步:
服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。
服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面服务的接口调用。

服务消费者的两个目标:发现服务和消费服务,发现服务由Eureka的客户端完成(通过@EnableDiscoveryClient注解让应用注册为Eureka客户端应用,获得服务发现能力),服务消费任务由ribbon完成(应用主类中创建RestTemplate的SpringBean实例,通过@LoadBalanced注解开启客户端负载均衡)

Eureka包含了ribbon,当ribbon与Eureka联合使用时,ribbon的服务实例清单会被扩展为从Eureka注册中心获取服务端列表。
还使用文章中的例子 Springcloud笔记(2)-Eureka服务注册中心-CSDN博客

服务消费 

 在 j-cloud-sonsumer的 HelloController.java代码

@RestController
public class HelloController {@Bean@LoadBalancedpublic RestTemplate getResttemplate(){return new RestTemplate();}@Autowiredprivate RestTemplate resttemplate;@RequestMapping("/hello")public String hello(){//指出服务地址   http://{服务提供者应用名名称}/{具体的controller}String url="http://provider-user/user/sayHello";//返回值类型和我们的业务返回值一致return resttemplate.getForObject(url, String.class);}}

 1、创建RestTemplate的Spring Bean实例,并通过@LoadBalanced注解开启客户端
负载均衡。

2、在接口实现中,调用RestTemplate创建的实例,使用getForObject方法实现对服务提供的/user/sayHello接口进行调用,可以看到这里的服务名为provider-user。

启动消费者访问查看控制台,Ribbon输出了当前客户端维护的provider-user的服务列表情况。其
中包含了各个实例的位置,Ribbo就是按照此信息进行轮询访问,以实现基于客户
端的负载均衡。另外还输出了一些其他非常有用的信息,如对各个实例的请求总数
量、第一次连接信息、上一次连接信息、总的请求失败数量等。

(使用ribbon来实现服务消费,ribbon对服务列表进行轮询,实现负载均衡)

RestTemplate

RestTemplate ,该对象会使用Ribbon的自动化配置,通过配置@LoadBanlanced开启客户端负载均衡。
在RestTemplate 中,对GET请求通过如下两个方法进行调用实现。
1)getForEntity
2) getForObject 
POST请求三个方法进行调用实现
1)postForEntity
2) postForObject
3) postForLocation

Ribbon支持的负载均衡策略

Ribbon内置了多种负载均衡策略,内部负载均衡的顶级接口为

com.netflix.loadbalancer.IRule

可以通过修改配置来调整Ribbon的负载均衡策略,具体代码如下

service-product: # 调用的提供者的名称

  ribbon:

    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

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

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

相关文章

离散型制造企业MES管理系统解决方案

随着制造业的快速发展,离散型制造企业面临着越来越多的挑战。多样性、生产批次、工序复杂性以及高度定制化等特点使得企业的生产管理变得越来越复杂。为了提高生产效率和管理效率,许多企业开始寻求合适的解决方案。本文将以离散型制造企业的特点为基础&a…

铁道交通运输运营3D模拟仿真实操提供一个沉浸、高效且环保的情境

VR模拟果蔬运输应急处理场景在农产品物流行业中具有重要的意义。这种模拟技术为农产品运输提供了全新的、更高效和更安全的方式来模拟真实世界的应急情况,帮助操作人员、研究者和管理者更好地理解和应对可能的运输风险措施。 VR模拟果蔬运输应急处理场景可以模拟出各…

Python操作Hive数据仓库

Python连接Hive 1、Python如何连接Hive?2、Python连接Hive数据仓库 1、Python如何连接Hive? Python连接Hive需要使用Impala查询引擎 由于Hadoop集群节点间使用RPC通信,所以需要配置Thrift依赖环境 Thrift是一个轻量级、跨语言的RPC框架&…

嵌入式C语言自我修养《内存堆栈管理》学习笔记

目录 一、Linux环境下的内存管理 二、栈的管理 三、堆内存管理 四、mmap映射区 五、内存泄漏与防范 六、常见的内存错误及检测 C程序中定义的函数、全局变量、静态变量经过编译链接后,分别以section的形式存储在可执行文件的代码段、数据段和BSS段中。当程序运…

/etc/profile与~/.bash_profile的区别

/etc/profile和~/.bash_profile都是用于存储用户的配置文件的,但它们的作用范围和加载顺序有所不同。 /etc/profile是系统级的配置文件,它应用于所有用户。当用户登录时,系统会首先加载/etc/profile。这个文件存储了系统范围的环境变量、系统…

【mysql】 bash: mysql: command not found

在linux 服务器上安装了mysql 也可以正常运行。 但是执行命令,系统提示:bash: mysql: command not found bash:mysql:找不到命令 执行的命令是: mysql -u root -h 127.0.0.1 -p由于系统默认会查找的 /usr/bin/ 中下的命令,如…

Ant Design Form.List基础用法

使用 Form.List 使用 项目中需要在新增可以多个如图 代码如下 // An highlighted block <Card title"产品信息" bordered{false}><Form.List name"productList" >{(fields, {add, remove}) > (<>{fields.map((field) > (<Ro…

XPath在数据采集中的应用:从XML和HTML中提取数据

目录 一、XPath简介 二、XPath的语法 三、XPath在数据采集中的应用 四、XPath和其他数据格式 总结 在当今的数据驱动时代&#xff0c;从各种数据源中提取有用的信息变得至关重要。其中&#xff0c;XML和HTML作为主流的数据源格式&#xff0c;常常出现在我们的数据提取任务…

电气设备漏电保护方式研究

安科瑞 崔丽洁 摘要&#xff1a;电气设备漏电故障可能对无防范意识人员产生触电危害&#xff0c;轻者灼伤人体接触位置&#xff0c;重者危及人员生命&#xff0c;甚至会产生漏电火花引起火灾&#xff0c;给企业带来不可估计的损失。文中浅谈电气设备漏电危害性及漏电保护方式&…

java模拟GPT流式问答

流式请求gpt并且流式推送相关前端页面 1&#xff09;java流式获取gpt答案 1、读取文件流的方式 使用post请求数据&#xff0c;由于gpt是eventsource的方式返回数据&#xff0c;所以格式是data&#xff1a;&#xff0c;需要手动替换一下值 /** org.apache.http.client.metho…

WebDAV之π-Disk派盘 + 恒星播放器

想要拥有一款万能视频播放器,全能解码播放器,无需转码,支持所有格式的视频和音频,直接播放的播放器?那就选恒星播放器。 恒星播放器支持视频投屏,倍速播放,后台播放等功能,还能一键截图和录制gif动图。支持全格式超高清真4K解码,蓝光HDR低占用,支持ISO文件直出的播放…

CoT 的方式使用 LLM 设计测试用例实践

前期准备 import SparkApi import os from dotenv import load_dotenv, find_dotenv#以下密钥信息从控制台获取_=load_dotenv(find_dotenv()) appid = os.getenv("SPARK_APP_ID") api_secret=os.getenv("SPARK_APP_SECRET") api_key=os.getenv("SPAR…

[Spring] SpringMVC 简介(二)

目录 五、域对象共享数据 1、使用 ServletAPI 向 request 域对象共享数据 2、使用 ModelAndView 向 request 域对象共享数据 3、使用 Model、Map、ModelMap 向 request 域对象共享数据 4、向 session 域和 application 域共享数据 六、SpringMVC 的视图 1、ThymeleafVie…

springboot 定时任务

springboot 定时任务 在Spring Boot中&#xff0c;你可以使用Spring的Scheduled注解来创建定时任务。以下是一个简单的示例&#xff1a; 首先&#xff0c;你需要在Spring Boot的主类上添加EnableScheduling注解以启用定时任务功能。 import org.springframework.boot.Spring…

golang/云原生/Docker/DevOps/K8S/持续 集成/分布式/etcd 教程

3-6个月帮助学员掌握golang后端开发岗位必备技术点 教程时长: 150小时 五大核心专栏,原理源码案例分析项目实战直击工作岗位 golang&#xff1a;解决go语言编程问题 工程组件&#xff1a;解决golang工程化问题 分布式中间件&#xff1a;解决技术栈单一及分布式开发问题 云原生…

Excel 中使用数据透视图进行数据可视化

使用数据透视表&#xff08;PivotTable&#xff09;是在Excel中进行数据可视化的强大工具。下面将提供详细的步骤来使用数据透视表进行数据可视化。 **步骤一&#xff1a;准备数据** 首先&#xff0c;确保你有一个包含所需数据的Excel表格。数据应该按照一定的结构和格式组织…

使用Swift开发Framework遇到的问题及解决方法

文章目录 一、Swift 旧版本Xcode 打出来的framework 新版本不兼容问题 一、Swift 旧版本Xcode 打出来的framework 新版本不兼容问题 Cannot load module xxx built with SDK ihphoneos16.4 when using SDK iphoneos17.0:XXX/xxx.framework/Modules/xxx.swiftmodule/arm64-appl…

如何提升网站排名和用户体验:优化网站速度

网站的排名和用户满意度直接受到站点内容的加载速度影响深远。通过精心的网站优化&#xff0c;您不仅可以提高排名&#xff0c;还可以提供更出色的用户体验&#xff0c;尽管用户可能不会察觉到您的网站加载得更快&#xff0c;但这是一个非常有意义的改进。在这篇文章中&#xf…

【C++ Miscellany】如何在同一个程序中结合C++和C

请记住以下几个简单守则&#xff1a; 确定你的C和C编译器产出兼容的目标文件&#xff08;object files&#xff09;。将双方都使用的函数声明为extern “C”。如果可能&#xff0c;尽量在C中撰写main。总是以delete删除new返回的内存&#xff1b;总以free释放malloc返回的内存…

stm32学习笔记:EXIT中断

1、中断系统 中断系统是管理和执行中断的逻辑结构&#xff0c;外部中断是众多能产生中断的外设之一。 1.中断&#xff1a; 在主程序运行过程中&#xff0c;出现了特定的中断触发条件 (中断源&#xff0c;如对于外部中断来说可以是引脚发生了电平跳变&#xff0c;对于定时器来…