前言
在Spring Boot中整合Spring Cloud Gateway是一个常见的需求,尤其是当需要构建一个微服务架构的应用程序时。Spring Cloud Gateway是Spring Cloud生态系统中的一个项目,它提供了一个API网关,用于处理服务之间的请求路由、安全、监控和限流等功能。
一、GateWay依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
二、application.yml配置
server:
port: 9527
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
- id: payment_routh #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
# uri: http://localhost:8001 #匹配后提供服务的路由地址
uri: lb://CLOUD-PAYMENT-SERVICE #匹配后提供服务的路由地址
predicates:
- Path=/Payment/getPaymentById/** # 断言,路径相匹配的进行路由
- id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
# uri: http://localhost:8001 #匹配后提供服务的路由地址
uri: lb://CLOUD-PAYMENT-SERVICE #匹配后提供服务的路由地址
predicates:
- Path=/Payment/lb/** # 断言,路径相匹配的进行路由
- After=2020-11-20T17:07:24.352+08:00[Asia/Shanghai]
# - Cookie=username,longy
# - Before=2020-11-20T17:11:24.352+08:00[Asia/Shanghai]
#- Header=X-Request-Id, \d+ # 请求头要有X-Request-Id属性并且值为整数的正则表达式
三、过滤器
@Component
@Slf4j
public class MyLogGatewayFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("***********************************************" + new Date());
log.info("***********************************************" + new Date());
String uname = exchange.getRequest().getQueryParams().getFirst("uname");
if (uname == null) {
System.out.println("用户名为null,非法用户***********************o(╥﹏╥)o");
log.info("用户名为null,非法用户***********************o(╥﹏╥)o");
exchange.getResponse().setStatusCode(HttpStatus.NO_CONTENT);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
总结
整合Spring Cloud Gateway到Spring Boot项目中需要添加相关依赖、配置路由规则、过滤器以及其他相关设置。这个过程涉及到多个步骤和配置文件,需要仔细规划和配置。一旦配置完成,Spring Cloud Gateway将为你的微服务架构提供强大的路由、安全性和监控功能。