目录
网关Gateway的概念:
准备
使用
方式一
因为配置了网关所以可以直接通过gateway发送请求
方式二
修改配置前:http://localhost:8082/provider/run
方式三(动态路由)
导入配置类
创建一个springboot项目命名为gateway,通过该项目(网关)统一管理provider和consumer的所有请求
将以下依赖导入到gateway项目
org.springframework.boot
spring-boot-starter-webflux
org.springframework.cloud
spring-cloud-starter-gateway
配置gateway项目的yml文件
server:
port: 8082
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848
gateway:
discovery:
locator:
#是否与服务发现组件进行结合,通过service-id(必须设置成大写)转发到具体的服务实例。默认
false
#为true代表开启基于服务发现的路由规则。
enabled: false
#配置之后访问时service-id无需大写
lower-case-service-id: true
配置前:http://localhost:8080/provider/run
配置后:http://localhost:8082/provider/run
配置gateway项目的yml文件
server:
port: 8082
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848
gateway:
discovery:
locator:
#是否与服务发现组件进行结合,通过service-id(必须设置成大写)转发到具体的服务实例。默认
false
#为true代表开启基于服务发现的路由规则。
enabled: false
#配置之后访问时service-id无需大写
lower-case-service-id: true
routes:
# 路由标识(id:标识,具有唯一性)
配合读取类使用
- id: user-consumer-api
#目标服务地址(uri:地址,请求转发后的地址),会自动从注册中心获得服务的IP,不需要手动写死
uri: lb://consumer
#优先级,越小越优先
#order: 999
#路由条件(predicates:断言)
predicates:
# 路径匹配,
- Path=/aa/**
filters:
#路径前缀删除示例:请求/name/bar/foo,StripPrefix=2,去除掉前面两个前缀之后,最后转
发到目标服务的路径为/foo
#前缀过滤,请求地址:http://localhost:8084/usr/hello
#此处配置去掉1个路径前缀,再配置上面的 Path=/usr/**,就将**转发到指定的微服务
#因为这个api相当于是服务名,只是为了方便以后nginx的代码加上去的,对于服务提供者
service-client来说,不需要这段地址,所以需要去掉
- StripPrefix=1
修改配置后:http://localhost:8082/prov/run
配置gateway项目的yml文件
server:
port: 8082
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848
gateway:
nacos:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
# namespace: xxx-xx-xx-xx
data-id: dynamic-routing.json
group: DEFAULT_GROUP
使用动态路由需要配合读取类使用
dynamic-routing.json 文件
{
"refreshGatewayRoute": true,
"routeList": [
{
"id": "provider-api",
"predicates": [
{
"name": "Path",
"args": {
"_genkey_0": "/ppp/**"
}
}
],
"filters": [
{
"name": "StripPrefix",
"args": {
"_genkey_0": "1"
}
}
],
"uri": "lb://provider",
"order": 0
}
]
}
配置文件放在nacos后可以通过配置类解析出nacos中的json文件,因为json文件配置了所有请求;
上述代码只配置了provider的请求所以只能访问provider且通过 http://localhost:8082/ppp/run 进行访问。如果访问 http://localhost:8082/consumer/test01 会被网关拦截
配置类放在资源中,有需要自取。