SpringCloud集成Eureka并实现负载均衡

[复制链接]
发表于 2026-10-4 14:57:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

微服务间怎么找到彼此?注册中心负责这件事。Eureka 是一个基于 SpringBoot 的 Java 程序:解压 eureka-server 的 jar 就是标准 Java 目录结构,外加一些前端页面用的 static 文件。它和 Nacos 思路接近,差别在于 Eureka 默认把实例信息放在 eureka-server 的内存里,适合开发测试,生产建议配数据库做持久化。

一、起一个独立的 Eureka-Server 模块

做成父-子结构的 Maven 工程。Eureka-Server 这层只要引入一个核心依赖:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

再加一个启动类、配好路径端口,服务就能起来:

server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

二、业务模块作为 Eureka-Client

各业务模块都是客户端,核心依赖:

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

并在模块里配置服务端地址。启动 eureka-server 与 user-service 后,访问 http://127.0.0.1:10086 就能在面板上看到服务已注册。

三、服务调用链路

订单服务 A 调用户服务 B:A 先从 Eureka-server 拿 B 的地址,再用 RestTemplate 的 getForObject() 发 HTTP 请求过去,把响应封装成指定对象。用大白话说,Eureka 就是那本「说明书」——A 按说明书找到 B 在哪。

四、加负载均衡

生产环境一个服务不可能只有一个实例,更多是一服务多实例。注册中心返回的是实例列表,调用方再从中挑一个落请求,这就实现了高可用与横向扩展。开启只需在服务调用方加一个注解:

@Bean
@LoadBalanced   // 负载均衡
public RestTemplate restTemplate() {
    return new RestTemplate();
}

RestTemplate 内部继承了一个做请求转发(负载均衡)的拦截器,@LoadBalanced 的职责就是把它打开。

五、怎么验证落到哪个实例

加个 aop 依赖,注入 Eureka client,把负载均衡分发的实例打印到控制台:

@Aspect
@Component
@Slf4j
public class RequestAspect {
    @Resource
    EurekaClient eurekaClient;

    @Before(value = "execution(* com.yu7.user.web.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        String className = joinPoint.getTarget().getClass().getName();
        log.debug("调用方法:{}", className + "." + methodName);
        InstanceInfo instanceInfo = eurekaClient.getApplicationInfoManager().getInfo();
        log.debug("负载均衡到的实例信息为:{}", instanceInfo.getInstanceId());
    }
}

再次发起请求,看控制台输出落在哪个端口的实例上,负载均衡就生效了。

六、一点选型体会

Dubbo + Redis、Dubbo + Zookeeper、SpringCloud + Eureka、SpringCloud + Nacos,每种组合各有适用场景。流行的不一定是适合自己的,做技术选型时手里能摆出几套方案、说清各自代价,比追一个「最热」更值钱。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表