以前写的gateway教程太敷衍了,导致我又看不懂写的啥玩意了,今天来写的详细点。
1、第一步导入依赖,没啥说的,这里我还导入了阿里巴巴的nacos,就不说了
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2、把网关注册到nacos上
package com.zsp.zspoagateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class ZspoaGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ZspoaGatewayApplication.class, args);
}
}
3、在application.properties上配置上nacos地址和网关端口
#nacos的地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#在nacos的名字
spring.application.name=zspoa-gateway
#对应端口号
server.port=88
#nacos分组地址 台式
spring.cloud.nacos.config.namespace=5395936d-cb44-48f6-a294-236c0b8b9464
spring.cloud.nacos.config.group=gateway
4、写配置类application.yml
spring:
cloud:
gateway:
routes:
- id: activiti_router
uri: lb://zspoa-activiti
predicates:
- Path=/api/acti/task/**
filters:
- RewritePath=/api/(?<segment>/?.*), /$\{segment}
# zspoa-activiti是nacos的服务名,相当于localhost:88会变成localhost:9000
# 这个的意思就是你访问http://localhost:88/api/acti/task/list
# 会被转发到http://localhost:7000/acti/task/list
# 注意:这里的api会被去掉
- id: Member_router
uri: lb://zspoa-member
predicates:
- Path=/api/member/**
filters:
- RewritePath=/api/(?<segment>/?.*), /$\{segment}
#这里的lb里面得写nacos配置的其他模块的微服务名称
#- Path=/api/** 会转发到的是http://localhost:8080/api/captcha.jpg
#但是原本应该发的地址应该是http://localhost:8080/renrenfast/captcha.jpg
- id: baidu_test
uri: https://www.baidu.com
predicates:
- Query=url,baidu
# 访问http://localhost:88?url=baidu 会变成www.baidu.com
- id: qq_test
uri: https://www.qq.com
predicates:
- Query=url,qq
这里需要特别说明一下,👴上次就是没写清楚这些,导致我看了好久没看懂。
spring:
cloud:
gateway:
routes:
- id: activiti_router
uri: lb://zspoa-activiti
predicates:
- Path=/api/acti/task/**
filters:
- RewritePath=/api/(?<segment>/?.*), /$\{segment}
a.首先这里的id是你起的名字,可以随便取。
b.其次zspoa-activiti是注册到nacos上的服务名,会把原本localhost:88(网关端口变成l模块端口的ocalhost:9000)
c. predicates和filters的意思就是,把localhost:88/api/acti/task/list转化为localhost:9000/acti/task/lis,这里的RewritePath=/api/(?/?.*), /${segment}表示把api去掉了