Spring Cloud LoadBalancer 教程

LoadBalancer 快速上手:入门案例

既然上章节已经将环境准备好了,下面就通过 Spring Cloud LoadBalancer 实现一个简单的实例,让你快速入门。

项目结构图如下:

快速上手:入门案例

其中,loadbalancer_demo 是 LoadBalancer 示例项目,包管理如下

快速上手:入门案例

详细过程如下:

添加依赖

在 pom.xml 文件中添加如下依赖:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

其中:

  • spring-cloud-starter-loadbalancer  是 Spring Cloud 官方提供的客户端负载均衡组件 starter,用于在微服务架构中实现服务消费者对服务提供者实例的负载均衡调用。它是 Netflix Ribbon 的替代方案,专注于轻量集成、响应式支持和 Spring 生态适配,是当前 Spring Cloud 推荐的客户端负载均衡解决方案。

  • spring-cloud-starter-netflix-eureka-client  是 Spring Cloud 生态中用于集成 Netflix Eureka 服务注册中心的客户端 starter,帮助微服务应用快速实现服务注册与发现功能。它基于 Netflix Eureka 组件封装,简化了客户端与 Eureka 服务器的交互配置,是微服务架构中服务注册发现的核心依赖之一。

  • spring-boot-starter-web  是 Spring Boot 提供的核心 starter 之一,用于快速基于 Spring MVC 的 Web 应用程序(包括 RESTful API 和传统 Web 应用)。它整合了 Spring MVC、Servlet 容器(默认 Tomcat)及相关依赖,通过 “自动配置” 机制简化了 Web 应用的搭建与配置,让开发者无需手动整合零散组件即可快速开发 Web 服务。

添加配置

创建 AppConfig 配置类,通过 @LoadBalanced 注解修饰创建的 RestTemplate,让 RestTemplate 具有负载均衡的能力,代码如下:

package com.hxstrive.springcloud.loadbalancer_demo.demo1.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class AppConfig {

    // 注入 RestTemplate,并添加 @LoadBalanced 注解启用负载均衡
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        System.out.println("->> restTemplate()");
        return new RestTemplate();
    }

}

启动类

为了方便直接在启动类中提供一个 /getData 接口,该接口通过 RestTemplate 调用用户服务的 /api/users 接口,代码如下:

package com.hxstrive.springcloud.loadbalancer_demo.demo1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@SpringBootApplication
@EnableDiscoveryClient
public class LoadbalancerDemoApplication {

    @Autowired
    private RestTemplate restTemplate;

    public static void main(String[] args) {
        SpringApplication.run(LoadbalancerDemoApplication.class, args);
    }

    @GetMapping("/getData")
    public String getData() throws Exception {
        // 关键:用服务名代替具体 IP:端口,LoadBalancer 会自动处理
        String url = "http://USER-SERVICE/api/users";  // 服务名与提供者的 spring.application.name 一致
        return restTemplate.getForObject(url, String.class);
    }

}

注意,getData() 中的 url 不能直接填写用户服务的真实地址,需要将 HOST:PORT 端口部分改为在 Eureka 中注册的服务名称,上面代码中的服务名为“USER-SERVICE”,登录到 Eureka,如下图:

快速上手:入门案例

比对以下,两者是不是一致,记得不要写错了哦。Spring Cloud LoadBalancer 将根据 USER-SERVICE 服务名从注册中心 Eureka 中获取可用实例列表,然后使用负载均衡算法(默认为轮训算法)从中选择一个服务进行调用。

启动&验证

启动测试服务,浏览器多次访问 http://localhost:8080/getData 地址,效果如下图:

快速上手:入门案例

更多知识请继续阅读后续章节。。。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号