苍穹外卖项目:从Nacos配置优化到Gateway网关搭建实战
一、准备工作
- 已搭建的苍穹外卖后端工程(含
sky-server-admin-operation、sky-common等模块) - 本地Nacos 2.4.x(单机模式,可正常访问控制台)
- 中文版IDEA 2025.2.4
- JDK 1.8
- Maven 3.6+(已配置阿里云仓库)
二、微服务Nacos配置优化(解决启动报错)
之前启动sky-server-admin-operation时遇Nacos ConnectionFailureException(endpoint is blank),调整如下:
1. 调整配置文件加载逻辑
(1)主配置application.yml(放Nacos连接信息,确保初始化加载)
spring:
application:
name: sky-server-admin-operation
profiles:
active: ${SPRING_PROFILES_ACTIVE:dev} # 环境变量优先,默认dev
config:
# 引入Nacos配置集(公共+模块专属)
import:
- nacos:common-config-${spring.profiles.active}.yml?namespace=你的Nacos命名空间ID&group=sky-group-common
- nacos:${spring.application.name}-${spring.profiles.active}.yml?namespace=你的Nacos命名空间ID&group=sky-group-admin
cloud:
nacos:
# Nacos Config配置(初始化必加载)
config:
server-addr: ${NACOS_SERVER_ADDR:你的本地Nacos地址:8848} # 本地默认值,云上可覆盖
username: ${NACOS_USERNAME:你的Nacos用户名}
password: ${NACOS_PASSWORD:你的Nacos密码}
namespace: ${NACOS_NAMESPACE:你的Nacos命名空间ID}
group: sky-group-common
# Nacos Discovery配置(复用Config信息)
discovery:
server-addr: ${spring.cloud.nacos.config.server-addr}
username: ${spring.cloud.nacos.config.username}
password: ${spring.cloud.nacos.config.password}
namespace: ${spring.cloud.nacos.config.namespace}
group: sky-group-admin
踩坑说明:之前将Nacos连接信息放在Profile配置(application-dev.yml)中,导致Nacos Config初始化时拿不到信息报“endpoint is blank”,因此需将连接信息放在主配置确保初始化加载。
(2)Profile配置application-dev.yml(只放业务配置,敏感信息占位)
# 数据库配置
sky:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
host: 你的MySQL主机地址
port: 3306
database: 你的数据库名称
username: 你的MySQL用户名
password: 你的MySQL密码
# Redis配置
redis:
host: 你的Redis主机地址
port: 6379
database: 你的Redis数据库编号
password: 你的Redis密码
timeout: 3000ms
# OSS配置
alioss:
endpoint: 你的OSS地域节点(如oss-cn-beijing.aliyuncs.com)
access-key-id: 你的OSS AccessKey ID
access-key-secret: 你的OSS AccessKey Secret
bucket-name: 你的OSS Bucket名称
2. 父pom.xml添加版本管理(解决依赖爆红)
在项目根目录pom.xml的<dependencyManagement>中添加:
<dependencyManagement>
<dependencies>
<!-- Spring Boot版本管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud版本(适配Boot 2.7.3) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba版本(适配Cloud 2021.0.4) -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.4.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 项目内部模块版本管理 -->
<dependency>
<groupId>com.sky</groupId>
<artifactId>sky-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
踩坑说明:网关和微服务的Spring Cloud/Alibaba依赖版本不匹配会导致依赖爆红,因此需在父pom统一管理版本。
3. 验证Nacos配置优化
- 启动本地Nacos(单机模式):
sh /usr/local/nacos/bin/startup.sh -m standalone - 启动
sky-server-admin-operation,Nacos控制台「服务列表」可看到该服务。
三、Spring Cloud Gateway网关搭建(中文版IDEA操作)
1. 创建网关模块sky-server-gateway
- 右键项目根目录→「新建」→「模块」→选「Maven」;
- 填写:GroupId
com.sky、ArtifactIdsky-server-gateway、Version1.0-SNAPSHOT→完成。
2. 配置网关pom.xml(避依赖冲突)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.sky</groupId>
<artifactId>sky-take-out</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.sky</groupId>
<artifactId>sky-server-gateway</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- Gateway核心依赖(禁加spring-boot-starter-web) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Nacos服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 项目公共模块 -->
<dependency>
<groupId>com.sky</groupId>
<artifactId>sky-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
踩坑说明:Gateway基于WebFlux框架,若引入spring-boot-starter-web(Servlet栈)会导致依赖冲突,因此pom中禁止添加该依赖;此外,初期因sky-common依赖未指定版本导致Maven报错,需在pom中明确版本或父pom统一管理。
3. 编写网关配置文件
(1)application.yml(通用配置)
spring:
application:
name: sky-server-gateway
profiles:
active: ${SPRING_PROFILES_ACTIVE:dev}
cloud:
gateway:
routes:
- id: admin-operation-route # 路由唯一ID
uri: lb://sky-server-admin-operation # 目标微服务名(Nacos中一致)
predicates:
- Path=/admin/** # 路径匹配规则
踩坑说明:路由的uri服务名需与Nacos中微服务的spring.application.name完全一致,否则网关无法发现服务。
(2)application-dev.yml(本地配置)
server:
port: 8080 # 网关统一端口
spring:
cloud:
nacos:
discovery:
server-addr: 你的本地Nacos地址:8848
username: 你的Nacos用户名
password: 你的Nacos密码
namespace: 你的Nacos命名空间ID
group: sky-group-gateway
4. 创建网关启动类(避包路径/注解冲突)
- 右键
src/main/java→ 「新建」→ 「软件包」→ 输入com.sky.gateway(踩坑说明:初期将启动类放在com.sky根包下,未按模块划分,易与其他微服务类冲突,规范放在com.sky.gateway下); - 右键
com.sky.gateway→ 「新建」→ 「Java类」→ 类名SkyGatewayApplication; - 编写代码:
package com.sky.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication(exclude = {RedisAutoConfiguration.class})
@EnableDiscoveryClient
public class SkyGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(SkyGatewayApplication.class, args);
}
}
踩坑说明:@EnableWebMvc会与Gateway的WebFlux框架冲突,启动类禁止添加该注解;且启动类包路径若层级混乱,会导致SpringBoot组件扫描异常,需按模块规范划分包路径。
5. 启动网关并验证
按「Nacos→微服务→网关」顺序启动(踩坑说明:若先启动网关,会因Nacos中无服务信息导致启动后无法转发),Nacos控制台可看到网关服务在线。
四、网关接口503错误记录(待排查)
1. 错误现象
访问http://localhost:8080/admin/employee/login返回503 Service Unavailable。
2. 待排查方向
- Nacos命名空间/分组是否与微服务一致(之前因分组不匹配出现过服务不可见);
- 网关路由的服务名是否与Nacos中微服务名完全匹配;
- 微服务实例是否处于健康状态;
- 网关与微服务的Nacos注册信息是否同步(如实例IP/端口是否正确)。
五、总结
- 完成微服务Nacos配置优化,解决“endpoint is blank”启动报错,通过主配置+Profile配置实现多环境隔离;
- 规避依赖冲突、包路径混乱、注解冲突等坑点,成功搭建Gateway网关并规范配置,实现请求统一入口;
- 记录网关503错误,关联之前的服务发现类踩坑点,明确后续排查方向,为微服务联调打下基础。

浙公网安备 33010602011771号