新建model包 gateway
引入依赖
<dependencies>
<!--引入gateWay-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--新版本cloud去掉了负载均衡,所以要自己加上,否则会报503错误-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!--父工程POM含有web,可利用最短路径原则将置scope为test,在开发中不会读取web包,别面报错-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.7</version>
<scope>test</scope>
</dependency>
</dependencies>
增加配置
########################## bootstrap级别通用配置 ##########################
# 默认开发环境
spring.profiles.active=dev
#spring.profiles.active=test
##### nacos(注册中心和配置中心)地址
spring.cloud.nacos.server-addr=127.0.0.1:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
spring.cloud.nacos.discovery.namespace=zhuxiaolong
spring.cloud.nacos.config.namespace=zhuxiaolong
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.prefix=usersystem-gateway
spring:
application:
name: usersystem-gateway
cloud:
gateway:
routes:
# id就是别名的意思,无真实意义(想叫啥叫啥)
- id: base
# uri是服务的真实地址,usersystem-base是nacos中注册的服务名
uri: lb://usersystem-base
# predicates是网关的拦截器,凡是请求前段有/api-base/的全部拦截
predicates:
- Path=/api-base/**
filters:
- StripPrefix=1
我们真实的服务请求路径是:
http://localhost:9000/base/sendMessage2
要加上/api-base才能网关才能拦截,gateWay的端口是8080,所以
我们发的请求是
http://localhost:8080/api-base/base/sendMessage2
网关的作用,/api-base的请求的拦截,将8080转换成真实的9000,
那么:现在的地址是
http://localhost:9000/api-base/base/sendMessage2
可以发现,现在的路径比真实路径多了个/api-base
我们要将它去掉,可以加上
filters:
- StripPrefix=1
这样现在经过网关处理的地址就成了真实地址
http://localhost:9000/base/sendMessage2
请求成功!