news 2026/8/1 9:14:50

3. SpringCloud之Ribbon使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3. SpringCloud之Ribbon使用

image.png

Ribbon 是一个独立的组件,是用来进行远程接口调用的,代码如下
通过 getForObject 方法可以掉到用 micro-order 服务的,order/list 接口。然后在调用期间会存在负载均衡,micro-order 服务对应有几个服务实例就会根据负载均衡算法选择某一个去调用。

1. 测试代码

1.1. 启动两个订单服务

端口号分别为9011,9012

image.png

1.2. 改造获取订单接口

返回当前服务实例的占用的端口号,用来判断当前服务是哪个实例

@RequestMapping("/order") @RestController public class OrderController { @Value("${server.port}") String port; @GetMapping("/list") public String getOrderList(String username) { return "该服务端口号:" + port + ",这是用户 :" + username + " 所有的订单信息"; } }

1.3. 调用用户服务的获取订单接口,

@RequestMapping("/user") @RestController public class UserController { @Autowired private RestTemplate restTemplate; @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } @GetMapping("/orderList") public String getOrderList(String username) { return restTemplate.getForObject("http://" + "micro-order" + "/order/list?username=" + username, String.class); } }

会发现,对订单服务的调用会存在负载均衡,在两个订单服务之间 切来切去。

image.png

2. Ribbon 配置

2.1. Application.properties 配置

# 关闭 ribbon 访问注册中心 Eureka Server 发现服务,但是服务依旧会注册。 #true 使用 eureka false 不使用。如果是false,那么表示要调用的服务列表从下面这个参数中获取,不然就从eureka-server中获取,这样扩容服务提供方的话,需要改配置文件与动态扩容的理念相悖,不建议大家使用 ribbon.eureka.enabled=true spring.cloud.loadbalancer.retry.enabled=true ###指定调用的节点 ###ribbon.eureka.enabled=false ##micro-order.ribbon.listOfServers=localhost:8001 ##单位 ms ,请求连接超时时间 #micro-order.ribbon.ConnectTimeout=1000 ##单位 ms ,请求处理的超时时间 #micro-order.ribbon.ReadTimeout=2000 #micro-order.ribbon.OkToRetryOnAllOperations=true ##切换实例的重试次数 #micro-order.ribbon.MaxAutoRetriesNextServer=2 ##对当前实例的重试次数 当 Eureka 中可以找到服务,但是服务连不上时将会重试 #micro-order.ribbon.MaxAutoRetries=2 ##配置负载均衡 #micro.order.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule #micro-order.ribbon.NFLoadBalancerPingClassName=com.netflix.loadbalancer.PingUrl

2.2 代码配置

2.2.1. 使用@RibbonClients 加载针对某一个服务的ribbon配置

这个配置类只针对 micro-order 服务,微服务系统里面有很多服务,这就可以区别化配置。

/* * 这个是针对 micro-order服务的 ribbon配置 * */ @Configuration @RibbonClients(value = { @RibbonClient(name = "micro-order",configuration = RibbonLoadBalanceMicroOrderConfig.class) }) // 也可以这样,只加载一个针对某个服务的ribbon配置 //@RibbonClient(name = "micro-order",configuration = RibbonLoadBalanceMicroOrderConfig.class public class LoadBalanceConfig { }
2.2.2. 配置 configuration

配置类的时候,一定要注意,配置类不能陪@ComponentScan 注解扫描到,如果被扫描到了则该配置类就是所有服务共用的配置了。

/* * 这个类最好不要出现在启动类的@ComponentScan扫描范围 * 如果出现在@ComponentScan扫描访问,那么这个配置类就是每个服务共用的配置了 * */ @Configuration public class RibbonLoadBalanceMicroOrderConfig { // @RibbonClientName private String name = "micro-order"; @Bean @ConditionalOnClass public IClientConfig defaultClientConfigImpl() { DefaultClientConfigImpl config = new DefaultClientConfigImpl(); config.loadProperties(name); config.set(CommonClientConfigKey.MaxAutoRetries,2); config.set(CommonClientConfigKey.MaxAutoRetriesNextServer,2); config.set(CommonClientConfigKey.ConnectTimeout,2000); config.set(CommonClientConfigKey.ReadTimeout,4000); config.set(CommonClientConfigKey.OkToRetryOnAllOperations,true); return config; } /* * 判断服务是否存活 * 不建议使用 * */ // @Bean // public IPing iPing() { // //这个实现类会去调用服务来判断服务是否存活 // return new PingUrl(); // } // 配置负载均衡,默认是轮训 @Bean public IRule ribbonRule() { //线性轮训 new RoundRobinRule(); //可以重试的轮训 new RetryRule(); //根据运行情况来计算权重 new WeightedResponseTimeRule(); //过滤掉故障实例,选择请求数最小的实例 new BestAvailableRule(); return new RandomRule(); } }

3.Ribbon 单独使用

Ribbon 是一个独立组件,可以脱离 springcloud 使用的.

有这两个jar包就可以

image.png

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/1 14:01:25

提速300%!MiniGPT-4多线程批量推理实战指南

还在为MiniGPT-4单张图片推理速度慢而苦恼吗?🤔 当你需要处理成百上千张图像时,逐一推理的方式简直让人崩溃!本文将为你揭秘如何通过多线程技术彻底释放MiniGPT-4的批量推理潜力,让你的图像理解任务飞起来!…

作者头像 李华
网站建设 2026/8/1 12:15:06

图数据库查询慢?立即检查Agent索引配置,8大常见陷阱你中了几个?

第一章:图数据库查询性能瓶颈的根源分析图数据库在处理高度关联数据时展现出强大优势,但在实际应用中,随着数据规模增长和查询复杂度提升,性能瓶颈逐渐显现。深入剖析这些瓶颈的根源,是优化系统响应速度和扩展能力的前…

作者头像 李华
网站建设 2026/8/1 21:47:29

【量子编程调试终极指南】:在VSCode中高效设置Azure QDK断点的7种方法

第一章:量子编程调试的核心挑战 量子编程作为前沿计算范式,其调试过程面临与经典程序截然不同的难题。由于量子态的叠加性、纠缠性和测量坍缩特性,传统的断点调试和变量监控手段无法直接适用。 量子态不可克隆性带来的限制 根据量子不可克隆…

作者头像 李华
网站建设 2026/8/1 16:54:47

为什么你的VSCode无法识别量子硬件?真相令人震惊

第一章:为什么你的VSCode无法识别量子硬件?真相令人震惊许多开发者在尝试将VSCode与量子计算设备连接时,发现编辑器根本无法识别连接的量子硬件。问题的根源并非出在物理连接上,而是开发环境缺少对量子SDK的正确配置。量子硬件通信…

作者头像 李华
网站建设 2026/8/1 16:11:35

为什么你的VSCode远程调试总失败?环境变量配置是关键!

第一章:VSCode远程调试为何频频失败在使用 VSCode 进行远程开发时,频繁出现调试失败的问题让许多开发者感到困扰。尽管 Remote-SSH、Remote-Containers 等扩展提供了强大的远程支持能力,但配置不当或环境差异往往导致断点无法命中、调试会话无…

作者头像 李华
网站建设 2026/8/1 23:01:10

5分钟快速部署Metis:腾讯开源AIOps平台的终极指南

5分钟快速部署Metis:腾讯开源AIOps平台的终极指南 【免费下载链接】Metis Metis is a learnware platform in the field of AIOps. 项目地址: https://gitcode.com/gh_mirrors/me/Metis Metis是腾讯开源的一款专注于智能运维(AIOps)领…

作者头像 李华