微服务实战系列(八)-网关springcloud gateway自定义规则
1. 场景描述
先说明下项目中使用的网关是:springcloud gateway, 因需要给各个网关服务系统提供自定义配置路由规则,实时生效,不用重启网关(重启风险大),目前已实现:动态加载自定义路由文件,动态加载路由文件中的路由规则。
2.解决方案
2.1 解决思路
新建总的监控总类,监控网关服务路由规则配置文件,然后每个路由配置文件再监控内容自己文件内容是否变化,动态加载到springcloud gateway中。
2.2 配置规则说明
bc-ruanjianlaowang-all.yaml是需要加载的配置文件名称,创建的有监听,当新增新的自定义路由规则文件,会自动去刷自定义规则。
gateways: bc-ruanjianlaowang-demo.json,bc-ruanjianlaowang-auth.json
创建自定义路由规则文件,目前已经新建了两个网关服务的文件,bc-ruanjianlaowang-demo.json,bc-ruanjianlaowang-auth.json,只需配置自定义规则即可,后续有其他网关服务,需新增自定义规则json文件,然后在bc-ruanjianlaowang-all.yaml配置下文件名称即可,不用重启网关,会自动实时动态加载生效。
2.2.1 规则示例说明
[
{
"id": "demo-router3","uri":"lb://demo","order": 0,
"filters": [{"name":"StripPrefix","args":{"_genkey_0":"1"}}],
"predicates":
[{"args": {"pattern":"/demo/test/v?1"},"name":"Path"}]
}
]
说明:
(1) "id": "demo-router3",id尽量用本中心名称+router+序号,要唯一;
(2)"uri":"lb://demo",这里可以是其他中心在注册中心的服务名称,假如有多个服务的话,默认负载均衡,轮询访问后面提供的对应服务;也可以这样配置:"uri":"http://10.192.168.10.:8010/",这样的配置是针对老服务没在注册中心注册,需要配置路径。
(3)"filters": [{"name":"StripPrefix","args":{"_genkey_0":"1"}}],这里的含义是默认去掉第一层路径就相当于去掉demo进行访问
(4) [{"args": {"pattern":"/demo/test/v?1"},"name":"Path"}] 这里就是具体的自定义配置规则了,依照下面的规则进行配置。
2.2.2 路径自定义规则说明
因springcloud gateway使用的是spring的AntPathMatcher进行路径匹配,简单把自定义配置规则复制过来说明,也可以直接百度看下。
(1)可以做URLs匹配,规则如下
?匹配一个字符
*匹配0个或多个字符
**匹配0个或多个目录
如果你觉得文章对你有些帮助,欢迎微信搜索「软件老王」第一时间阅读或交流!
(2)用例如下
/trip/api/*x 匹配 /trip/api/x,/trip/api/ax,/trip/api/abx ;但不匹配 /trip/abc/x;
/trip/a/a?x 匹配 /trip/a/abx;但不匹配 /trip/a/ax,/trip/a/abcx
/**/api/alie 匹配 /trip/api/alie,/trip/dax/api/alie;但不匹配 /trip/a/api
/**/*.htmlm 匹配所有以.htmlm结尾的路径
/app/*.x 匹配(Matches)所有在app路径下的.x文件
/app/p?ttern 匹配(Matches) /app/pattern 和 /app/pXttern,但是不包括/app/pttern
/**/example 匹配(Matches) /app/example, /app/foo/example, 和 /example
/app/**/dir/file. 匹配(Matches) /app/dir/file.jsp, /app/foo/dir/file.html,/app/foo
/bar/dir/file.pdf, 和 /app/dir/file.java
/**/*.jsp 匹配(Matches)任何的.jsp 文件
(3)另外说明
springcloud或者说spring对路径匹配对正则支持的不是太好,但是也可以用,简单拿过来说一下。
符号 {spring:[a-z]+}
示例代码:
@RequestMapping("/index/{username:[a-b]+}")
@ResponseBody
public String index(@PathVariable("username") String username){
System.out.println(username);
return username;
}
结果:
index/ab true 输出 ab
index/abbaaa true 输出 abbaaa
index/a false 404错误
index/ac false 404错误
网关原代码是默认开放全部服务,新代码后会按照自定义规则来,假如未配置,会禁止跳转。
更多知识请关注公众号:「软件老王」,IT技术与相关干货分享,回复关键字获取对应干货,java,送必看的10本“武功秘籍”;图片,送100多万张可商用高清图片;面试,送刚毕业就能月薪“20k”的java面试题,软考,送官方pdf书籍与通关论文,后续会不断更新,比如“工具”,“视频“等,已经在整理中。
微服务实战系列(八)-网关springcloud gateway自定义规则的更多相关文章
- go-zero微服务实战系列(十一、大结局)
本篇是整个系列的最后一篇了,本来打算在系列的最后一两篇写一下关于k8s部署相关的内容,在构思的过程中觉得自己对k8s知识的掌握还很不足,在自己没有理解掌握的前提下我觉得也很难写出自己满意的文章,大家看 ...
- go-zero微服务实战系列(三、API定义和表结构设计)
前两篇文章分别介绍了本系列文章的背景以及根据业务职能对商城系统做了服务的拆分,其中每个服务又可分为如下三类: api服务 - BFF层,对外提供HTTP接口 rpc服务 - 内部依赖的微服务,实现单一 ...
- 微服务实战系列--Nginx官网发布(转)
这是Nginx官网写的一个系列,共七篇文章,如下 Introduction to Microservices (this article) Building Microservices: Using ...
- ASP.NET Core微服务实战系列
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. 前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想 ...
- Chris Richardson微服务实战系列
微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...
- 微服务实战系列(七)-网关springcloud gateway
1. 场景描述 springcloud刚推出的时候用的是netflix全家桶,路由用的zuul,但是据说zull1.0在大数据量访问的时候存在较大性能问题,2.0就没集成到springcloud中了, ...
- 微服务实战系列(四)-注册中心springcloud alibaba nacos
1.场景描述 因要用到微服务,关于注册中心这块,与同事在技术原型上做了讨论,初步定的方案是使用:阿里巴巴的nacos+springcloud gateway,下面表格是同事整理的注册中心对比,以前用的 ...
- Spring-cloud微服务实战【八】:API网关zuul
在前面的文章中,我们先后使用了eureka/ribbon/feign/hystrix搭建了一个看似完美的微服务了,那是否还有值得继续优化的地方呢?答案肯定是有的,如果从整个微服务内部来看,基本已经 ...
- 微服务实战系列(六)-网关springcloud zuul
1. 场景描述 今天接着介绍springcloud,今天介绍下springcloud的路由网关-Zuul,外围系统或者用户通过网关访问服务,网关通过注册中心找到对应提供服务的客户端,网关也需要到注册中 ...
随机推荐
- Navicat Premium 12免费版安装
前言 这几年的工作过程中使用了很多的数据库工具,比如Sqlyog,DBeaver,sqlplus等工具,但是个人觉得很好用的还是Navicat. 不如人意的就是目前Navicat都在收费,今天就来分享 ...
- go微服务系列(四) - http api中引入protobuf
1. protobuf相关依赖安装 2. 改造之前的client 2.1 新建proto文件 2.2 运行protoc命令生成go文件 2.3 然后把原来的map修改成具体的类型就可以了 3. 处理j ...
- 【Android】Android开发点击查看手机电量的小功能。学习广播的一个小技能小Demo
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一下效果图: 先写一个广播类 ...
- Android开发之java代码工具类。判断当前网络是否连接并请求下载图片
package cc.jiusan.www.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; ...
- 热更新 && 增量更新
Unity中SLua.Tolua.XLua和ILRuntime效率评测 http://blog.csdn.net/u011467512/article/details/72716376 如何阅读lua ...
- ios .framework动态库重签名
真机上运行.framework时,如果报 dyld'dyld_fatal_error:dyld: Library not loaded: @rpath/XX.framework/XX Referenc ...
- web-UI自动化必会技能—xpath轴,了解一下?
本来以为不会再更新UI自动化相关的东西了,不过最近群里的朋友在搞UI,提出了许多问题,我看了下,大多还是页面元素定位类的问题,那今天就再讲点. 一.先了解xpath 说到元素定位,大家应该都知道常见的 ...
- springboot2.x基础教程:Swagger详解给你的接口加上文档说明
相信无论是前端还是后端开发,都或多或少地被接口文档折磨过.前端经常抱怨后端给的接口文档与实际情况不一致.后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新.其实无论是前端调用后端,还是后端调用 ...
- docker基本操作及介绍
Docker 简介 Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现.项目后来加入了 Linux ...
- unzip命令笔记
unzip命令 文件压缩与解压 unzip命令用于解压缩由zip命令压缩的".zip"压缩包. 语法 unzip(选项)(参数) 选项 -c:将解压缩的结果显示到屏幕上,并对字符做 ...