之前Nacos的项目老早就搭好了,一直往里面塞些流水的管理接口,突发想搞一些别的组件,让项目完整起来。
欧克,先上版本:
- SpringBoot 2.3.2
- SpringCloud H.SR8
- CloudAlibaba 2.2.5
开始搭
1. 先搞模块,跑起来
在基本的Nacos上添加Gateway模块,加依赖,如图
Nacos的,Gateway的,还有要在Nacos客户端作配置的…
加启动类,这个要比正常的多加一个注解,@EnableDiscoveryClient,字面意思嘛,发现服务的。好,启动,成功!Nice
2. 写配置,本地跑
当然,写之前还是要看看注册上去没,打开你的Nacos看看,服务列表有没有这玩意。
是的,我有,啊哈哈哈
重点来了,之前写配置的时候用的是application.yml,现在不用这个,级别有点低的,咱用bootstrap.yml,这个要先加载,来的快。
spring:
application:
name: gateway-service
profiles:
active: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #nacos中心地址
file-extension: yaml # 配置文件格式
这几个都是必要的,一个名字,一个环境,还是config的配置,另外再说下,如果想要配的端口不是默认的8080,也要在这里写上。
我们在Nacos端打开配置管理的配置列表,右上角有一个小加号,点它
注意几个点:
- Data ID:之前写的名字.之前写的文件格式
- Group: 暂时默认就好,如后续需要不同分组再调整
- 配置格式: 和之前写的保持一致,最好是yaml和properties
- 配置内容: 除了yml之外的所有配置都丢进去
好,开始写配置内容
最简单的一种写法了,需要先说明下,uri的 lb:// 是一种固定写法,后面跟上别的服务的ApplicationName即可,它会自己去注册中心找到。
别的不管,先跑,跑起来是王道,鼠标往下走,找到发布,点它。
有了,去请求一下。
看完整地址,前面的框是网关,后面的是原本的接口。我的端口是9099,后面跟的order是什么,再看一遍上面的配置
predicates:
- Path=/order/**
这里是用了通过请求路径匹配校验,就是只有开头是order才会转发到正确的地址,那会有一个疑问,加上这个不是接口就错了嘛,是的,确实错了,多了东西就要把它去掉,再看配置
filters:
- StripPrefix=1 # 转发过滤前缀个数
看到了吧,过滤前缀的个数,这时候,不就把前面多出来的order过滤掉了嘛。
举个例子:原本的接口是 order/createOrder,加上Path校验变成了order/order/createOrder,所以上面看到的请求地址就是这样,再过滤一下前缀,实际上还是调的原本的接口,这样就没错了,这个也是为了区分不同服务的地址,这样就可以根据服务去做到统一的域名,一目了然。
最后,如果需要用到别的断言及过滤器,从官方文档上找找看,写的很详细
Spring Cloud Gateway 感谢!!