全部产品
云市场

流控规则参数说明

更新时间:2019-03-13 19:10:12

灰度发布可以基于 HTTP 和 HSF 创建流控规则,它们的规则参数设置有所不同。

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

本文档将重点对 HSF 流控规则中的参数进行说明。

HSF 参数表达式

全链路灰度支持用参数表达式来获取参数的某个属性,目前已支持下面的表达式:

表达式 说明 备注
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

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

String 示例

参数为数组

假设参数类型为 String 数组。

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

数组示例

参数为 List

假设参数为List<String>

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

List 示例

参数为复杂类型

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

  1. public class Person {
  2. private String name;
  3. private int age;
  4. private String[] array;
  5. private List<String> list;
  6. private Map<String,String> map;
  7. }

可以设置如下的规则:

复杂示例