在 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 發現)
- 避免前端直連微服務,保證安全性與可維護性