选择器和规则管理
本文档将介绍Apache ShenYu后台管理系统中选择器和规则的使用,关于选择器和规则的概念及设计请参考 流量控制。
请参考运维部署的内容,选择一种方式启动shenyu-admin。比如,通过 本地部署 启动Apache ShenYu后台管理系统。 启动成功后,可以直接访问 http://localhost:9095 ,默认用户名和密码分别为: admin 和 123456。
选择器
在插件列表中展示了当前的所有插件,可以给每个插件添加选择器和规则:

例如,给divide插件添加选择器:

-
选择器详解:
- 名称:给选择器取一个名字。
- 类型:自定义流量(
custom flow) 或 全流量(full flow)。自定义流量就是请求会走下面的匹配方式与条件。全流量则不走。 - 匹配方式:
and或者or是指下面多个条件是按照 并(and) 还是 或(or) 的方式来组合。 - 条件:
uri:根据uri的方式来筛选流量,match的方式支持模糊匹配(/**)header:根据请求头里面的字段来筛选流量。query:根据uri的查询条件来进行筛选流量。ip:根据请求的真实ip来筛选流量。host:根据请求的真实host来筛选流量。post:根据请求上下文获取参数,不建议使用。cookie:根据请求的cookie来筛选流 量。req_method:根据请求的方式来筛选流量。- 条件匹配:
match:模糊匹配,建议和uri条件搭配,支持restful风格的匹配。(/test/**)=:前后值相等,才能匹配。regEx:正则匹配,表示前面一个值去匹配后面的正则表达式。contains:请求包含指定的值,才能匹配。TimeBefore:指定时间之前。TimeAfter:指定时间之后。exclude: 是match方式的反选。startsWith:请求前缀等于指定的值,才能匹配。在特定场景下,可替换match(如用/test/来替换/test/**)以获得更好的性能。endsWith:请求后缀等于指定的值,才能匹配。pathPattern:是match的优化版,性能比match更好,但是不支持将**写在path中间(如/api/**/xxx)。
- 继续后续选择器:后续选择器还是否执行。
- 是否开启:打开才会生效。
- 打印日志:打开时,当匹配上的时候,会打印匹配日志。
- 执行顺序:当多个选择器的时候,执行顺序小的优先执行,值越小优先级越高。
- 处理:即
handle字段,在 插件处理管理 中进行设置。作用是:当请求流量匹配上该选择器时,做什么样的处理操作。 在选择器中,handle字段往往用来表示用户手动维护的服务实例列表,每条服务实例信息包含以下字段:host:host地址ip:port:ip+port地址protocol:协议weight:服务实例的权重warmupTime:服务预热时间startupTime:服务开启时间status:true: 服务节点可用,false: 服务节点不可用
注意:对于引入了服务发现模块的插件(如Divide插件、Grpc插件和WebSocket插件),选择器页面上不展示处理(即
handle字段),而是通过服务发现标签页下的local模式来手动维护服务下游实例列表,详见服务发现模块 。
- 上述图片中表示: 当请求的
uri前缀是/http,会转发到127.0.0.1:8080这个服务上。 - 选择器建议:可以通过设置
uri条件,startsWith前缀(/contextPath/)匹配,进行第一道流量筛选。 - 选择器(同规则)模糊匹配条件规则:
?匹配1个字符*匹配0个或多个字符**匹配0个或多个目录
规则

-
当流量经过选择器匹配成功之后,会进入规则来进行最终的流量匹配。
-
规则是对流量最终执行逻辑的确认。
-
规则详解:
- 名称:给规则取一个名字。
- 匹配方式:
and或者or是指下面多个条件的组合方式。 - 条件:
uri:根据uri的方式来筛选流量,match的方式支持模糊匹配(/**)header:根据请求头里面的字段来筛选流量。query:根据uri的查询条件来进行筛选流量。ip:根据请求的真实ip来筛选流量。host:根据请求的真实host来筛选流量。post:不建议使用。cookie:根据请求的cookie来筛选流量。req_method:根据请求的req_method来筛选流量。- 条件匹配:
match:模糊匹配,建议和uri条件搭配,支持restful风格的匹配。(/test/**)=:前后值相等,才能匹配。regEx:正则匹配,表示前面一个值去匹配后面的正则表达式。contains:请求包含指定的值,才能匹配。TimeBefore:指定时间之前。TimeAfter:指定时间之后。exclude: 是match方式的反选。startsWith:请求前缀等于指定的值,才能匹配。在特定场景下,可替换match(如用/test/来替换/test/**)以获得更好的性能。endsWith:请求后缀等于指定的值,才能匹配。pathPattern:是match的优化版,性能比match更好,但是不支持将**写在path中间(如/api/**/xxx)。
- 是否开启:打开才会生效。
- 打印日志:打开时,当匹配上的时候,才会打印匹配日志。
- 执行顺序:当多个规则的时候,执行顺序小的优先执行。