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自定义规则相关推荐

  1. eureka多台注册中心_微服务实战系列(五)-注册中心Eureka与nacos区别

    1. 场景描述 nacos最近用的比较多,介绍下nacos及部署吧,刚看了下以前写过类似的,不过没写如何部署及与eureka区别,只展示了效果,补补吧. 2.解决方案 2.1 nacos与eureka ...

  2. spring boot和spring cloud的区别_微服务实战系列(三)-cloud、boot及maven关系

    1 . 问题描述 随着springboot.springcloud的不断迭代升级,开发效率不断提升,越来越多的开发团队加入到spring的大军中,今天用通俗的语言,介绍下什么是springboot,s ...

  3. 微服务实战系列之SpringCloud Alibaba学习(四)

    微服务实战系列之SpringCloud Alibaba: 微服务实战系列之SpringCloud Alibaba学习(一) 微服务实战系列之SpringCloud Alibaba学习(二) 微服务实战 ...

  4. SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤

    说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...

  5. 微服务接入oauth2_SpringCloud微服务实战系列(十九)Ouath2在真实场景中的应用之客户端接入(第一种写法)...

    SpringCloud微服务实战系列(十九)Ouath2在真实场景中的应用之客户端接入(第一种写法) 一.概述 在<SpringCloud微服务实战系列(十七)Ouath2在真实场景中的应用之资 ...

  6. Spring Cloud 微服务实战系列-Spring Boot再次入门(一)

    导语   看到标题大家都疑惑,为什么叫做再入门呢?在之前的博客中也分享过相关的内容,但为了让Spring Cloud 微服务实战系列更加完整就再次编写一个入门的内容,也是为了这个系列的内容更加的完整, ...

  7. Go + gRPC-Gateway(V2) 构建微服务实战系列,小程序登录鉴权服务(三):RSA(RS512) 签名 JWT(附demo)

    系列 云原生 API 网关,gRPC-Gateway V2 初探 Go + gRPC-Gateway(V2) 构建微服务实战系列,小程序登录鉴权服务:第一篇 Go + gRPC-Gateway(V2) ...

  8. java测试案例_微服务实战测试之Java实例篇

    测试分为好多种类型 测试用例的组织 单元测试 集成测试 端到端测试 消费者测试 契约测试 这是著名的测试金字塔, 也叫测试冰淇淋, 意谓我们应该从下到上地组织编写我们的测试, 大量地单元测试覆盖80% ...

  9. springcloud feign 服务调用其他服务_微服务实战——SpringCloud与Feign集成

    上一篇集成了ZuulGateway和Eureka并进行了测试.在实际场景中,我们肯定会有很多的微服务,而他们之间可能会存在相互调用的关系,那么,如何优雅的处理服务之间的调用问题呢?接下来就是我们要解决 ...

最新文章

  1. poj3259(SPFA算法)
  2. 循序渐进Python3(七) -- 2-- 面向对象进阶
  3. android 自定义dialog 定时关闭,Android编程实现自定义Dialog的大小自动控制方法示例...
  4. 关于《0 bug -- C/C++商用工程之道》的一处bug
  5. Winform中DataGridView绑定IList数据源后的排序
  6. 词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法
  7. 如何做Teams Bot的测试覆盖
  8. ASP.NetCore+VUE 实现学生成绩管理系统(一)
  9. sr650服务器cpu型号,至强Gold 联想ThinkSystem SR650评测
  10. Spring Security中HttpSecurity常用方法及说明
  11. android 漩涡动画,使用P5.js构造漩涡动画特效
  12. Opencv_HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP解决方案
  13. Android 多层视差头部背景的实现
  14. 土人系列AS入门教程--对象篇
  15. 什么是Python解释器?
  16. 基于verilog的uart协议实现
  17. 电脑蓝屏的几种状况处理
  18. 2018主流台式计算机跑分,pu天梯图2018最新版2018电脑cpu处理器性能排行榜
  19. c语言笔记(翁凯男神
  20. wind7计算机控制面板在哪,Win7控制面板在哪打开|win7打开控制面板的小技巧

热门文章

  1. 乌班图服务器系统怎么配ip,Ubuntu server14-04 服务器双网卡怎么配置静态ip
  2. c语言动态双端栈的原理,数据结构(C语言版)例题(第三章:栈和队列)
  3. linux bitcoind环境搭建,bitcoin_book_2nd
  4. 手动代码上线 及个人优化调整
  5. vim 删除,复制和粘贴
  6. java jtextfield 不显示_【swing问题】_JTextField组件怎么显示不全啊
  7. Lucene入门程序
  8. fragment与activity之间的通信
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的微信小程序图书借阅管理系统
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的健身管理系统