微服务架构设计:Spring Cloud Gateway与Nacos集成
依赖配置
在Spring Boot项目的pom.xml中添加以下依赖:
XML
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
Nacos服务注册配置
在application.yml中配置Nacos服务发现:
yaml
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: public
group: DEFAULT_GROUP
动态路由配置
通过Nacos配置中心管理路由规则,创建gateway-routes.json:
json
{
"routes": [
{
"id": "user-service",
"uri": "lb://user-service",
"predicates": ["Path=/api/user/**"],
"filters": ["StripPrefix=1"]
}
]
}
路由刷新监听
实现NacosConfigListener监听配置变更:
java
@RefreshScope
@Configuration
public class RouteConfig {
@Value("${spring.cloud.nacos.config.data-id}")
private String dataId;
@Bean
public NacosConfigListener nacosConfigListener() {
return new AbstractSharedListener() {
@Override
public void innerReceive(String dataId, String group, String config) {
refreshRoutes();
}
};
}
}
全局过滤器示例
添加认证过滤器:
java
@Component
public class AuthFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if (StringUtils.isEmpty(token)) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
}
负载均衡配置
确保已启用Ribbon负载均衡:
yaml
spring:
cloud:
loadbalancer:
ribbon:
enabled: true
健康检查配置
在Nacos控制台配置健康检查端点:
yaml
management:
endpoints:
web:
exposure:
include: health,info
服务熔断配置
集成Sentinel进行流量控制:
java
@Bean
public SentinelGatewayFilter sentinelGatewayFilter() {
return new SentinelGatewayFilter();
}
性能优化建议
调整网关线程池参数:
yaml
server:
tomcat:
threads:
max: 200
min-spare: 10
日志追踪配置
集成Sleuth实现链路追踪:
yaml
spring:
sleuth:
sampler:
probability: 1.0
配置验证方式
通过以下命令验证路由是否生效:
bash
curl http://localhost:8080/api/user/1