drools动态配置规则_微服务实战系列(八)-网关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技术与相关干货分享,回复关键字获取对应干货。
drools动态配置规则_微服务实战系列(八)-网关springcloud gateway自定义规则相关推荐
- eureka多台注册中心_微服务实战系列(五)-注册中心Eureka与nacos区别
1. 场景描述 nacos最近用的比较多,介绍下nacos及部署吧,刚看了下以前写过类似的,不过没写如何部署及与eureka区别,只展示了效果,补补吧. 2.解决方案 2.1 nacos与eureka ...
- spring boot和spring cloud的区别_微服务实战系列(三)-cloud、boot及maven关系
1 . 问题描述 随着springboot.springcloud的不断迭代升级,开发效率不断提升,越来越多的开发团队加入到spring的大军中,今天用通俗的语言,介绍下什么是springboot,s ...
- 微服务实战系列之SpringCloud Alibaba学习(四)
微服务实战系列之SpringCloud Alibaba: 微服务实战系列之SpringCloud Alibaba学习(一) 微服务实战系列之SpringCloud Alibaba学习(二) 微服务实战 ...
- SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤
说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...
- 微服务接入oauth2_SpringCloud微服务实战系列(十九)Ouath2在真实场景中的应用之客户端接入(第一种写法)...
SpringCloud微服务实战系列(十九)Ouath2在真实场景中的应用之客户端接入(第一种写法) 一.概述 在<SpringCloud微服务实战系列(十七)Ouath2在真实场景中的应用之资 ...
- Spring Cloud 微服务实战系列-Spring Boot再次入门(一)
导语 看到标题大家都疑惑,为什么叫做再入门呢?在之前的博客中也分享过相关的内容,但为了让Spring Cloud 微服务实战系列更加完整就再次编写一个入门的内容,也是为了这个系列的内容更加的完整, ...
- Go + gRPC-Gateway(V2) 构建微服务实战系列,小程序登录鉴权服务(三):RSA(RS512) 签名 JWT(附demo)
系列 云原生 API 网关,gRPC-Gateway V2 初探 Go + gRPC-Gateway(V2) 构建微服务实战系列,小程序登录鉴权服务:第一篇 Go + gRPC-Gateway(V2) ...
- java测试案例_微服务实战测试之Java实例篇
测试分为好多种类型 测试用例的组织 单元测试 集成测试 端到端测试 消费者测试 契约测试 这是著名的测试金字塔, 也叫测试冰淇淋, 意谓我们应该从下到上地组织编写我们的测试, 大量地单元测试覆盖80% ...
- springcloud feign 服务调用其他服务_微服务实战——SpringCloud与Feign集成
上一篇集成了ZuulGateway和Eureka并进行了测试.在实际场景中,我们肯定会有很多的微服务,而他们之间可能会存在相互调用的关系,那么,如何优雅的处理服务之间的调用问题呢?接下来就是我们要解决 ...
最新文章
- poj3259(SPFA算法)
- 循序渐进Python3(七) -- 2-- 面向对象进阶
- android 自定义dialog 定时关闭,Android编程实现自定义Dialog的大小自动控制方法示例...
- 关于《0 bug -- C/C++商用工程之道》的一处bug
- Winform中DataGridView绑定IList数据源后的排序
- 词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法
- 如何做Teams Bot的测试覆盖
- ASP.NetCore+VUE 实现学生成绩管理系统(一)
- sr650服务器cpu型号,至强Gold 联想ThinkSystem SR650评测
- Spring Security中HttpSecurity常用方法及说明
- android 漩涡动画,使用P5.js构造漩涡动画特效
- Opencv_HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP解决方案
- Android 多层视差头部背景的实现
- 土人系列AS入门教程--对象篇
- 什么是Python解释器?
- 基于verilog的uart协议实现
- 电脑蓝屏的几种状况处理
- 2018主流台式计算机跑分,pu天梯图2018最新版2018电脑cpu处理器性能排行榜
- c语言笔记(翁凯男神
- wind7计算机控制面板在哪,Win7控制面板在哪打开|win7打开控制面板的小技巧
热门文章
- 乌班图服务器系统怎么配ip,Ubuntu server14-04 服务器双网卡怎么配置静态ip
- c语言动态双端栈的原理,数据结构(C语言版)例题(第三章:栈和队列)
- linux bitcoind环境搭建,bitcoin_book_2nd
- 手动代码上线 及个人优化调整
- vim 删除,复制和粘贴
- java jtextfield 不显示_【swing问题】_JTextField组件怎么显示不全啊
- Lucene入门程序
- fragment与activity之间的通信
- 基于JAVA+SpringMVC+Mybatis+MYSQL的微信小程序图书借阅管理系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的健身管理系统