API熔断
插件信息
名称 | 字段 | 属性 |
---|---|---|
API熔断 | circuit_breaker | 响应机制 |
功能描述
- 设定熔断(判断API为不可用状态)的状态码(match_codes),达到熔断条件后网关停止对该API的转发。
- 设定熔断开启时的返回值。
熔断的条件为:
- 监控期(monitor_period)内的请求错误率(failure_percent)达到预设的值,并且该监控期内的请求总数超过最低熔断阀值(minimum_requests),则进入熔断期(break_period);
- 熔断期网关会停止转发该API,此时网关返回熔断开启时的返回值;
- 熔断期过后,接口进入半开放状态,网关重新对该API进行转发,此时会根据连续请求成功次数(success_counts)来判断下一个状态: (1)若连续请求成功次数达到预设值,则熔断关闭,网关完全开放转发,重新进入到下一个监控期; (2)若连续请求成功次数没有达到预设值,则进入到下一个熔断期。
注:熔断机制中的连续请求成功次数(success_counts)指的是 熔断状态码 除外的请求数。
配置示例
示例说明:当响应状态码为404或504时,判断为失败的请求。若300秒内总请求数 >= 5次,且请求失败率(失败请求数/总次数)>= 50%, 则api进入熔断状态30秒,期间接受到的请求直接返回,并且响应状态码重写201,响应头部新增"demo": "1"
, 熔断时响应体body重写为{已熔断}
。30秒后进入半开放状态,连续3次成功请求才进入健康状态,否则请求失败一次也会重新进入熔断状态。
{
"match_codes": "404,504",
"monitor_period": 300,
"minimum_requests": 5,
"failure_percent": 0.5,
"break_period": 30,
"success_counts": 3,
"breaker_code": 201,
"headers": {
"demo": "1"
},
"body": "{已熔断}"
}
配置参数说明
参数名 | 值类型 | 是否必填 | 值可能性 | 默认值 | 说明 |
---|---|---|---|---|---|
match_codes | string | 是 | 200 | 熔断匹配状态码 | |
monitor_period | int | 否 | 30 | 30 | 监控期,单位为秒 |
minimum_requests | int | 是 | 30 | 最低熔断阀值,达到熔断状态的最少请求次数 | |
failure_percent | float64,[0,1] | 是 | 0.5 | 监控期内的请求错误率 | |
break_period | int | 否 | 30 | 30 | 熔断期,单位为秒 |
success_counts | int | 是 | 2 | 连续请求成功次数,半开放状态下请求成功次数达到后会转变成健康状态 | |
breaker_code | int | 是 | 200 | 熔断状态下返回的响应状态码, 闭区间范围为[200,599] | |
headers | object | 否 | 熔断状态下新增的返回头部值 | ||
body | string | 否 | 熔断状态下的返回响应体 |
注意事项:
- headers配置参数是对响应头部信息的新增或修改。
响应信息
插件开启,每次均会在响应信息中新增三个头部:
- Fail-Counts :失败请求次数
- Success-Counts : 成功请求次数
- Monitor-Info: 监控信息
- circuit_breaker_state: 熔断状态 0熔断关闭 1熔断开启 2半开放状态
- recovering_success_counts: 半开放状态下连续请求成功次数
- start_time:监控期开始时间
- trip_time: 跳闸开始时间,即熔断开始时间
- success_counts: 成功请求次数
- fail_counts:失败请求次数
全局开启API熔断插件
配置带有API熔断插件的服务
配置说明:当响应状态码为404或504时,判断为失败的请求。若300秒内总请求数 >= 5次,且请求失败率(失败请求数/总次数)>= 50%, 则api进入熔断状态30秒,期间接受到的请求直接返回,并且响应状态码重写201,熔断时响应体body重写为{"已熔断"}
。30秒后进入半开放状态,连续3次成功请求才进入健康状态,否则请求失败一次也会重新进入熔断状态。