Siddhi中使用正则匹配http.status.code处理响应报错,如何正确编写正则?
搞定Siddhi HTTP-Response Source正则匹配状态码的坑
嘿,我之前也踩过这个坑!你用正则表达式配置http-response类型Source时出现报错,而写具体状态码就正常,核心原因是Siddhi默认不会把http.status.code的值当作正则解析,得手动开启正则匹配的开关才行。
正确配置姿势
你需要在Source配置里加上regex.match.enabled='true'参数,这样http.status.code的内容就会被当作正则表达式处理了。给你改好的示例:
匹配所有5xx状态码
@source(type='http-response', sink.id = 'serviceActivate', http.status.code = '5\\d+', regex.match.enabled='true', @map(type = 'json', @attributes(result = '$.result')))
精准匹配200、400、500这三个状态码
@source(type='http-response', sink.id = 'serviceActivate', http.status.code = '(200|400|500)', regex.match.enabled='true', @map(type = 'json', @attributes(result = '$.result')))
几个关键注意点
- 正则里的转义字符要写双反斜杠
\\:因为Siddhi的配置字符串会先做一次转义解析,所以\d得写成\\d才能被正确识别为数字匹配。 - 别用
[2|4|5]00这种写法:这个正则其实会匹配200、|00、400、500,其中|00完全是无效的状态码,用括号分组的(200|400|500)才是精准匹配多个离散值的正确方式。 - 一定要加
regex.match.enabled='true':没开这个开关的话,Siddhi会把http.status.code的内容当作普通字符串做精确匹配,这就是你之前看到“未定义针对状态码'500'的Source”报错的原因——它在找状态码字符串是5\d+的配置,自然找不到,就把响应丢了。
验证方法
改完配置后,触发对应状态码的请求,看看日志里有没有再出现那个报错,如果没有,就说明正则匹配已经正常工作啦!
内容的提问来源于stack exchange,提问作者Serg
相关产品推荐
相关产品推荐

