使用Ribbon实现客户端的负载均衡
* 个人博客空间 : https://zggdczfr.cn/ *
Ribbon
Spring Cloud Netflix Ribbon 是一个客户端负载均衡的组件。
Ribbon的特点
-
和Eureka完美整合
-
支持多种协议-HTTP,TCP,UDP
-
缓存/批处理
-
built in failure resiliency
具体请查看官方文档 : https://github.com/Netflix/ribbon/wiki
整合Ribbon实现客户端的负载均衡
前期准备
这里用到了上次的两个demo(服务注册中心和服务提供者)。
首先,添加服务提供者的服务,这里我将其端口号打印出来能够更加直观地观察到负载均衡的实现:
1 2 3 4 5 6 7 8 9 10 11 12 | @RestController public class PrintfController { @Value ( "${server.port}" ) private String port; @RequestMapping ( "/service" ) public String printf(){ System.out.println( "服务消费者正在使用服务,端口号为 : " +port); return "success" ; } } |
接下来分别启动这两个工程,注意将服务提供者的端口号(原来为1111改为1112)修改后再启动一次.就整个项目而言,总共有三个微服务再运行着(一个注册中心,两个服务提供者)。PS:其实服务提供者你想弄多少都行。
创建服务消费者
像一个普通的 spring cloud 工程一样,创建后向注册中心注册自己的信息。
添加依赖:
1 2 3 4 | <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> |
添加消费调用接口:
这里涉及到一个类LoadBalancerClient
,这个就是由 Netflix Ribbon 提供的工具类。他会根据 ServiceId (配置文件中的Service Name)向 Eureka (注册服务器)获取服务地址。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @RestController public class ConsumerController { @Autowired private LoadBalancerClient client; @RequestMapping ( "/test" ) public String test(){ ServiceInstance instance = client.choose( "service" ); URI uri = instance.getUri(); System.out.println(uri); return ( new RestTemplate()).getForObject(uri+ "/service" ,String. class ); } } |
配置文件信息:
1 2 3 4 | # eureka client 配置 spring.application.name=ribbon-consumer server.port= 2222 eureka.client.serviceUrl.defaultZone=http: //localhost:8761/eureka/ |
注意:LoadBalancerClient
返回的是已经注册的服务器地址。
启动服务消费者
启动工程后,我们可以看到如下注册信息:
Ribbon 实现负载均衡
多次访问 http://localhost:2222/test ,并查看控制台信息:
这样子,就实现了客户端的负载均衡了~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具