实战四:Gateway网关作全局路由转发
Gateway网关的作用主要是两个:路由转发,请求过滤。此篇讲的是路由转发,下篇介绍请求过滤。
一,创建网关module,添加依赖
1,new -> module -> maven 或直接 spring initializr:如果是通过spring initializr,请不要选择web组件,因为Gateway是通过webflux开发,与web组件冲突。同样的,parent选择之前创建的父工程,统一管理版本号。
2,修改pom文件,添加依赖,不需要依赖common
注:spring-cloud-starter-gateway中包含了spring-cloud-starter,其中又包括了spring-boot-starter
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
注:Gateway需要从注册中心获取服务信息,所以此处要加服务注册与发现组件 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
二,通过配置文件配置路由转发规则
server:
port: 9090
spring:
cloud:
# 服务注册中心配置
nacos:
server-addr: localhost:8848
discovery:
server-addr: ${spring.cloud.nacos.server-addr}
#网关配置,可以配置多条路由转发规则
gateway:
routes:
- id: user
uri: lb://user
predicates:
- Path=/user/**
discovery: #开启服务发现实现负载均衡
locator:
enabled: true
application: name: gateway
以上配置会将地址中带有user的url转发到注册中心中的user服务,lb://是负载均衡的意思,即这种方式已经启用了负载均衡。
predicates是转发规则,是一个数组,多条记录时须各项规则都通过才能匹配。predicates的操作有很多,可以在官网查看。
三,通过java代码方式配置路由转发规则
@Configuration public class GatewayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("user_route", r -> r.path("/user/**").uri("lb://user")).build(); } }