Spring cloud gateway——动态操作路由的网关
本人基于网上的博客,具体参考的哪篇有点久远了,忘了。(致敬原作者)
实现了一个可以动态增加,删除路由的api网关,持久化层用的是内嵌式数据库h2(未实现完全)。
本工程仅作想法实现参考。谢谢
github地址:https://github.com/OwenZhouzhou/spring-gateway-demo
介绍和使用方式参考如下,谢谢。
Spring cloud gateway 一共有15个predicate(断言), 25个filter(过滤器).
Predicates(图不全):
Filters(图不全):
请求流程图如下:
以为为几个例子。
添加路由:
127.0.0.1:8082/route/add method:post content-type:application/json
Data示例(id为路由编号,需要唯一,):
1. path断言, 表示访问127.0.0.1:8082/meteor_93实际上访问的是https://blog.****.net/meteor_93
{
"id":"path_route",
"predicates":
[
{"name":"Path","args":{"path":"/meteor_93"}
}
],
"uri":"https://blog.****.net"
}
- After断言,在此时间之后匹配:
[{"filters":[],"id":"after_route","order":0,"predicates":[{"args":{"_genkey_0":"2018-03-18T17:32:58.129+08:00[Asia/Shanghai]"},"name":"After"}],"uri":"https://blog.****.net"}]
- Before断言,在此时间之前匹配
{"filters":[],"id":"before_route","order":0,"predicates":[{"args":{"_genkey_0":"2020-03-18T17:32:58.129+08:00[Asia/Shanghai]"},"name":"Before"}],"uri":"https://blog.****.net"}
- Between断言,在此时间区域内
{"filters":[],"id":"between_route","order":0,"predicates":[{"args":{"datetime1":"2022-01-22T17:27:58.907+08:00[Asia/Shanghai]","datetime2":"2022-01-22T17:27:58.909+08:00[Asia/Shanghai]"},"name":"Between"}],"uri":"https://blog.****.net"}
- Cookie断言
{"filters":[],"id":"cookie_route","order":0,"predicates":[{"args":{"_genkey_0":"chocolate","_genkey_1":"ch.p"},"name":"Cookie"}],"uri":"https://blog.****.net"}
.........
Filter:
- AddRequestHeader Filter, 匹配断言通过后,进入filter
{"filters":[{"args":{"_genkey_0":"X-Request-Foo","_genkey_1":"Bar"},"name":"AddRequestHeader"}],"id":"add_request_header_route","order":0,"predicates":[{"args":{"_genkey_0":"2017-01-20T17:42:47.789-07:00[Asia/Shanghai]"},"name":"After"}],"uri":"https://blog.****.net"}
表示在请求头中添加 name = X-Request-Foo,value = Bar (后台如下获取)
删除路由:
127.0.0.1:8082/route/delete/{routeId} method:get
更新路由:
127.0.0.1:8082/route/update method:update content-type:application/json