跳转至

降级

随着请求量的增大,业务服务承受的压力也随之增大,为了保障核心业务的正常运行,需要对部分请求条件性地降级以释放更多的服务端资源

降级配置

Hango以静态降级插件(static-downgrade)的形式提供了流量降级方案,用户从请求的多个维度配置降级条件,并配置对应的响应内容,具体配置如下

名称 类型 必选项 范围 描述
kind string static-downgrade 插件类型(值固定)
condition.request.requestSwitch boolean - 是否使用请求进行匹配
condition.request.method []string GET
POST
PUT
DELETE
OPTIONS
HEAD
TRACE
CONNECT
PATCH
HTTP的请求方法类型
condition.request.path.match_type string exact_match
safe_regex_match
请求路径匹配方式
condition.request.path.value string - 请求路径匹配内容
condition.request.host.match_type string exact_match
safe_regex_match
请求域名匹配方式
condition.request.host.value string - 请求域名匹配内容
condition.request.headers[].headerKey string - 请求头匹配名称
condition.request.headers[].match_type string exact_match
safe_regex_match
请求头匹配匹配方式
condition.request.headers[].value string - 请求头匹配匹配内容
condition.response.code.match_type string exact_match
safe_regex_match
响应状态码匹配方式
condition.response.code.value integer [200, 599] 响应状态码匹配内容
condition.response.headers[].headerKey string - 响应头匹配名称
condition.response.headers[].match_type string exact_match
safe_regex_match
响应头匹配方式
condition.response.headers[].value string - 响应头匹配内容
response.code integer [200, 599] 降级后返回的状态码
response.headers[key] string - 降级后返回的响应头
response.headers[value] string - 降级后返回的响应头对应值
response.body string - 降级后返回的body内容

前置条件

以下curl命令中存在变量,使用前需要替换为真实环境数据,变量以{{}}符号包裹,例如{{ 网关ID }}需要根据网关的实际ID进行替换;创建插件命令中PluginConfiguration(插件配置)需要根据实际需要进行配置

创建

curl -XPOST -v -H "Content-Type:application/json" -d '{
  "BindingObjectId": {{ 路由ID }},
  "BindingObjectType": "routeRule",
  "GwId": {{ 网关ID }},
  "PluginConfiguration": "{\"condition\":{\"request\":{\"requestSwitch\":true,\"method\":[\"GET\",\"POST\"],\"path\":{\"match_type\":\"exact_match\",\"value\":\"/rootpath/subpath\"},\"headers\":[{\"headerKey\":\"reqHeader\",\"match_type\":\"exact_match\",\"value\":\"reqHeaderValue\"}]},\"response\":{\"code\":{\"match_type\":\"safe_regex_match\",\"value\":\"503\"},\"headers\":[{\"headerKey\":\"rspHeader\",\"match_type\":\"exact_match\",\"value\":\"rspHeaderValue\"}]}},\"kind\":\"static-downgrade\",\"response\":{\"headers\":{\"downgradeHeader\":\"downgradeHeaderValue\"},\"code\":\"200\",\"body\":\"Test Response Context\"}}",
  "PluginType": "static-downgrade"
}' http://{{ hango-portal ip:port }}/gdashboard?Action=BindingPlugin&Version=2019-09-01

测试

## 基于如下基本的curl命令,添加插件中配置的请求头、响应头等降级条件,测试是否返回配置的响应内容(响应码、响应头和响应体)
curl -v "http://{{ 网关IP }}/{{ 路由path }}" -H "host:{{ 网关关联域名 }}"

## 例如,插件中配置了降级条件配置了一个响应头为"reqHeader: reqHeaderValue",则需要构造如下请求进行测试
curl -v "http://{{ 网关IP }}/{{ 路由path }}" -H "host:{{ 网关关联域名 }}" -H "reqHeader:reqHeaderValue"

删除

curl -v -H "Content-Type:application/json" http://{{ hango-portal ip:port }}/gdashboard?PluginBindingInfoId={{ 插件ID }}&Action=UnbindingPlugin&Version=2019-09-01

界面配置方法

详见hango-gateway工程文档插件配置方法

Back to top