在 Spring Cloud 微服务架构中,前端调用后端接口通常不直接通过 Eureka,而是通过以下两种核心方式实现:
一、前端直接调用后端服务(需解决跨域和地址管理问题)
1. AJAX 直接调用
前端通过 HTTP 请求(如 Axios、Fetch)直接访问后端服务的 IP 或域名,例如:
javascript
axios.get("http://service-hi:8081/hi/name")
缺点:
- 需手动管理后端服务地址(IP/端口),难以适应动态扩缩容
- 需处理跨域问题(CORS),需在后端服务配置 @CrossOrigin 或网关层统一处理
2. 适用场景
仅适合开发环境或服务数量极少的简单项目,生产环境不推荐。
二、通过 API 网关调用(主流方案)
API 网关(如 Spring Cloud Gateway)作为统一入口,是生产环境推荐方式:
1. 工作流程
- 前端请求网关(如 http://gateway:8080/api/user/1)
- 网关根据路由规则转发到 Eureka 注册的服务(如 user-service)
2.网关核心优势
功能 | 说明 |
---|---|
服务发现集成 | 自动从 Eureka 获取服务实例列表,无需硬编码地址 |
动态路由 | 配置路由规则(如 /api/user/** → user-service) |
统一鉴权/限流 | 在网关层实现身份验证(JWT)、请求限流等 |
协议转换 | 支持 REST、WebSocket 等协议转发 |
负载均衡 | 集成 Ribbon 实现客户端负载均衡 |
三、服务间后端调用(与前端无关但需了解)
若前端请求需触发多个微服务调用(如 A 服务调 B 服务),此时后端使用:
1. RestTemplate + Ribbon
java
@Bean
@LoadBalanced // 集成Eureka服务发现
public RestTemplate restTemplate() {return new RestTemplate();
}
- 调用方式:restTemplate.getForObject(“http://service-hi/hi/{name}”, String.class, name)
2.OpenFeign 声明式调用
java
@FeignClient("service-hi")
public interface ServiceHi {@GetMapping("/hi/{name}")String sayHi(@PathVariable String name);
}
- 通过接口伪装 HTTP 客户端,自动负载均衡 (方便简洁)
关键结论
- Eureka 的角色
- 作为服务注册中心管理服务实例地址,不直接处理前端请求
- 网关/后端服务通过 Eureka 动态解析服务名 → 实际 IP/端口
- 生产环境最佳实践
- 前端 → 网关 → 后端服务(通过 Eureka 发现)
- 避免前端直连微服务,保证安全性与可维护性