全部产品
Search
文档中心

企业级分布式应用服务 EDAS:流控规则参数说明

更新时间:Jan 11, 2024

灰度发布可以基于HTTP和HSF创建流控规则,它们的参数规则设置有所不同。本文档将重点对HSF流控规则中的参数进行说明。

HTTP可以根据Cookie值、HTTP Header值和URL参数值3种不同类型设置参数,按取模(mod 100)后余数的范围或列表(list)作为条件判定流量。相对通用和简单,不再详细介绍。需要说明的是,当参数值中包含非数字时将通过哈希(Hash)算法将非数字转化为数字。所以如果您的参数相对复杂,建议您使用列表方式进行流量判定。

使用参数表达式来获取参数属性。

目前已支持下面的表达式:

表达式

说明

备注

args0

当前参数的值

args0.name

参数的name属性

会翻译成Java语句:arg.getName()

args0.isEnabled()

参数的enabled属性,是一个bool类型。

Java规范里,bool类型的getter格式是isXXX()

args0[0]

arg是一个数组,获取数组的第一个值。

args0.get(0)

arg是一个List,获取List的第一个值。

args0.get("key")

arg是一个Map,获取key对应的值。

假设选择的是第一个参数,EDAS在页面会自动生成args0前缀。

以上的表达式可以组合使用,例如如下的表达式:

args0.persons[0].meta.get("name")先取参数的persons数组的第1个。再取person的meta属性,是一个Map。再取Map中“name”这个key的值。

支持的条件

  • =:支持字符串、数字、Boolean和Char的比较。

  • !=:支持字符串、数字、Boolean和Char的比较。

  • >:支持数字的比较。

  • >=:支持数字的比较。

  • <:支持数字的比较。

  • <=:支持数字的比较。

支持的值表达式

HSF参数匹配条件中的值表达式,代表了一个Java中的值。目前,仅支持Java中的基本类型,例如数字、字符、Boolean和Char等。不支持复杂类型和用户自定义类型。

值表达式有以下几种:

  • Java标准String

    使用Java标准String表达式来表示一个字符串,被半角双引号("")包含的一段字符,即以"开始,并以"结束。例如:

    • "tom":字符串tom

    • "10":字符串10

    • "abc ":字符串abc,后面紧跟着一个空格

    • "a":字符串a

    • "\n":换行

    • "\"abc\"":字符串"abc"

    • "a\bc":字符串a\bc

    该表达式可以表达任意的字符串,语法就是Java里标准的String表达式。

  • 数字类型

    如果要表示一个数字类型的值,只需要输入数字本身即可。例如:

    • 100

    • 1.23

    • -3.14

    • 1.23f

    说明

    1.23在Java里默认是double类型的,如果要表示float类型的1.23,需要用1.23f。这是Java类型系统的精度决定的。

  • Boolean类型

    Boolean类型只有两个值:true和false。

  • Char类型

    Char类型表示一个字符,用半角单引号('')包含,即以(')开始,并以(')结束。如'a'。

  • Null类型

    Null类型表示Java里的Null。直接输入null即可。

  • 字符串字面量

    字符串字面量用一种“一字不差”的方式来表达一个字符串。里面的字符不需要进行转义。例如:

    字符串字面量

    Java String

    tom

    “tom”

    “\””

    \

    “\\“

    a\b

    “a\b”

    下面的表格列出了所有类型的值对应的值表达式:

    值类型

    值表达式(在界面中需要填入的内容)

    java.lang.String

    “tom”

    “tom”或tom

    java.lang.String

    “true”

    “true”

    java.lang.String

    “10”

    “10”

    说明

    如需表达String类型的10,必须要加上双引号。没有双引号时,会被解析为数字类型的10。

    java.lang.String

    换行

    “\n”

    java.lang.String

    “\’”

    java.lang.String

    “\””

    java.lang.String

    \

    “\“

    java.lang.String

    aa’bb

    “aa’bb”

    int

    10

    10

    java.lang.Integer

    10

    10

    byte

    10

    10

    boolean

    true

    true

    java.lang.Boolean

    true

    true

    short

    10

    10

    long

    100

    100

    java.lang.Long

    100

    100

    float

    1.23f

    1.23f

    说明

    当arg为float类型时,一定要在数字后加上f。1.23f==1.23返回false。

    java.lang.Float

    1.23f

    1.23f

    double

    1.23

    1.23

    java.lang.Double

    1.23

    1.23

    char

    ‘a’

    ‘a’

    null

    null

    null

示例

  • 参数为String

    输入框内什么都不用填。表示参数本身。

    edas-appmgmt-canary-hsfPara-exam1.png

  • 参数为数组

    假设参数类型为String数组。

    输入框输入[0]。表示取数组的第一个元素。

  • 参数为List

    假设参数为List<String>

    输入框输入.get(0)。表示取List的第一个元素。注意不要忘记了半角句号(.)。

  • 参数为复杂类型

    假设某个方法的第一个参数是如下的类型:

    public class Person {
    
        private String name;
        private int age;
        private String[] array;
        private List<String> list;
        private Map<String,String> map;
    }           

    可以设置如下的规则:

    edas-appmgmt-canary-hsfPara-exam4-complex.png