Spring Cloud 提供了一个在Spring WebFlux之上构建API网关的组件。 Spring Cloud Gateway 提供一种简单而有效的方式来路由到API,并为它们提供横切关注点,如:安全性、监控/指标和弹性。
添加Maven依赖
<!-- Springcloud Gateway 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Springcloud Nacos 注册中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Springcloud 本地负载均衡依赖,通过注册中心获取服务,需要加入此依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
配置Gateway
断言详细文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories
过滤器详细文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
server:
port: 8087
spring:
application:
name: gateway-server
cloud:
nacos:
discovery:
server-addr: localhost:8848
group: DEFAULT_GROUP
namespace: public
username: nacos
password: nacos
gateway:
routes:
- id: user-route # 路由ID,唯一标识,自定义命名
uri: lb://gateway-user # 从注册中心获取服务
predicates:
# 路径断言工厂,符合 /user-server 前缀的请求都会被转发
- Path=/user-server/**
filters:
# 去除路径前缀
- StripPrefix=1
# gateway跨域配置
globalcors:
cors-configurations:
'[/**]':
allowed-origins:
- "*"
allowed-methods:
- GET
- POST
- PUT
- DELETE
allowed-headers:
- "*"
allowed-origin-patterns:
- "*"
max-age: 3600
# 设置全局超时时间
httpclient:
connect-timeout: 1000 # 连接超时时间
response-timeout: 5s # 响应超时时间
访问网关服务:http://网关IP端口/user-server/sayhello
配置了 StripPrefix 后会将一级路径去掉,最终网关转发地址:http://网关IP端口/sayhello
请求就会转发至配置的注册中心的 gateway-user 服务中。