
# 配置API的断路器
ROMA Connect支持通过插件策略的方式，为API提供灵活的扩展能力。断路器是ROMA Connect在后端服务出现性能问题时保护系统的内置机制。当API的后端服务出现连续N次超时或者时延较高的情况下，会触发断路器的降级机制，向API调用方返回固定错误或者将请求转发到指定的降级后端。当后端服务恢复正常后，断路器关闭，请求恢复正常。
插件策略和API本身相互独立，只有为API绑定插件策略后，插件策略才对API生效。为API绑定插件策略时需指定发布环境，插件策略只对指定环境上的API生效。
#### 约束与限制
同一个API在同一个环境中只能绑定一个相同类型的插件策略，已被API绑定的插件策略无法删除。
#### 创建断路器策略
1. 登录[ROMA Connect控制台](https://console.huaweicloud.com/roma3)，在左侧导航栏选择"资源管理"，在实例页面单击实例，进入实例控制台。
2. 在左侧的导航栏选择"服务集成 APIC \> API策略"，在"策略管理"页签下单击"创建策略"。
3. 在选择策略类型弹窗中选择"插件策略 \> 断路器"。
4. 在配置策略弹窗中配置插件策略信息。
   表1策略配置 
   | 参数        | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   |:---|:---|
   | 策略名称      | 填写策略的名称，根据规划自定义。建议您按照一定的命名规则填写策略名称，方便您快速识别和查找。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 策略类型      | 固定为"断路器"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 可见范围      | 选择策略的可见范围。 - 集成应用：策略归属某个集成应用，仅拥有该集成应用权限的用户可查看和使用该策略。  - 全局：当前实例的所有用户都可查看和使用该策略。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 集成应用      | **仅当"可见范围"选择"集成应用"时需要配置。** 选择策略所属的集成应用。若没有可用的集成应用，可单击右侧的"新建集成应用"，创建一个集成应用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 描述        | 填写策略的描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 策略内容：支持表单模式和脚本模式两种方式，脚本模式配置请参见[脚本配置示例]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ||
   | 策略生效范围    | 选择策略的生效范围。 - 单个API生效：绑定到当前策略的API各自计算断路器触发次数。  - API共享生效：绑定到当前策略的所有API共同计算断路器触发次数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | **触发条件配置**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ||
   | 断路器类型     | 选择断路器的触发类型。 - 超时降级：断路器以后端服务超时作为触发条件。  - 匹配条件降级：断路器以"匹配条件"中的设置作为触发条件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 条件模式      | 选择断路器的触发模式。 - 计数器：在时间窗内满足触发条件的请求次数达到设定阈值，则立即触发断路器。  - 百分比：在时间窗内满足触发条件的请求率达到设定阈值，时间窗结束后触发断路器。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 匹配条件      | **仅当"断路器类型"选择"匹配条件降级"时需配置。** 配置断路器的触发条件。 - 响应错误码：后端响应状态码符合设定值，则该后端请求满足触发条件。  - 触发降级响应时延：后端响应时延超过设定值，则该后端请求满足触发条件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 时间窗 (秒)   | 断路器的触发次数统计时间窗，与"阈值"或"最小百分比"参数配合使用，当时间窗内的触发次数达到设定阈值或百分比，则触发断路器。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 阈值        | **仅当"条件模式"选择"计数器"时需配置。** 断路器的触发阈值，与"时间窗 (秒)"参数配合使用。当时间窗内满足触发条件的后端请求次数达到阈值，则触发断路器。 说明： 断路器插件是按单个网关组件分开触发，若ROMA Connect存在多个网关组件，则各个网关组件的触发统计分开计数。 若某个网关组件在时间窗内的触发次数超过阈值，则发送到该网关组件上的请求会触发断路器，其他未超过阈值的网关组件依然正常转发请求。 您可以在ROMA Connect实例控制台的"实例信息"页面，在"连接地址"下查看网关组件的IP个数，一个IP表示为一个网关组件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 最小调用次数    | **仅当"条件模式"选择"百分比"时需配置。** 时间窗内触发断路器的API最小调用次数。如果时间窗内API的总调用次数小于该值，则不触发断路器。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 最小百分比 (%) | **仅当"条件模式"选择"百分比"时需配置。** 断路器的触发阈值，与"时间窗 (秒)"参数配合使用。当时间窗内满足触发条件的后端请求百分比达到阈值，则触发断路器。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 开启时长 (秒)  | 断路器开启的持续时间，断路器开启时间达到该值后将关闭。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 后端降级策略    | 后端降级策略开关。 - 开启：触发降级的API将把请求转发到指定后端服务。  - 关闭：触发降级的API不会把请求转发到任何后端服务，直接返回服务不可用的错误信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 后端策略类型    | **仅当"后端降级策略"开启时需配置。** 断路器开启后，后端请求的转发策略类型。 说明： 建议不要设置敏感信息，以防泄露。 - Mock：把配置的响应结果作为后端服务响应固定返回。 - Mock自定义返回码：后端服务响应的状态码。  - Mock返回结果：后端服务响应的Body信息，JSON格式。  - 响应头参数：后端服务响应的Header参数。    - HTTP\&HTTPS：把后端服务请求转发给指定后端服务。 - 负载通道：是否使用负载通道访问后端服务。若选择"使用"，您需要提前[创建负载通道](https://support.huaweicloud.com/usermanual-roma/roma_03_2104.html)。  - 后端URL：配置要转发的后端服务请求地址。  - 后端超时(ms)：后端服务请求的超时时间，默认为5000ms。    - FunctionGraph：把后端服务请求转发给指定函数。 - 函数URN：函数请求的唯一标识。单击"添加"，添加作为后端服务的函数。  - 函数名：选择函数URN后自动配置。  - 版本或别名：选择要使用的函数版本或函数别名。  - 调用类型：选择函数的调用类型。 - Synchronous：表示同步调用，后端函数服务收到调用请求后立即执行并返回调用结果，客户端发送请求后同步等待，收到后端响应后关闭连接。 - Asynchronous：表示异步调用，后端函数服务收到调用请求后将请求排队，执行成功后返回调用结果，服务端在空闲的情况下会逐个处理排队的请求，客户端不关注请求调用的结果。   - 后端超时(ms)：后端服务请求的超时时间，默认为5000ms。    - Passthrough：把后端服务请求转发给API的原后端服务。 单击"添加参数"，可为转发给后端服务的请求添加请求头参数。    |
   | 降级参数配置    | 降级参数配置开关。开启后可为断路器自定义规则，API请求优先匹配自定义规则中的触发条件和降级策略，仅当未匹配到自定义规则时才执行上方配置的默认触发条件和降级策略。 - 若匹配到自定义规则，则执行规则内配置的触发条件和降级策略。若匹配到的自定义规则内未配置触发条件或降级策略，则执行上方配置的默认触发条件或降级策略。  - 若未匹配到自定义规则，则执行上方配置的默认触发条件和降级策略。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 定义参数      | 定义用于规则匹配的参数。单击"添加参数"，添加用于规则匹配的参数。 说明： 建议不要设置敏感信息，以防泄露。 - 参数位置：参数在API请求中的位置。 - path：API请求的URI，已默认配置。  - method：API请求方法，已默认配置。  - header：API请求Header参数的第一个值。  - query：API请求Query参数的第一个值。  - system：系统参数。    - 参数：用作规则匹配的参数名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 定义规则      | 自定义断路器的匹配规则。单击"添加规则"，可添加规则，系统根据从上到下的顺序匹配规则。 - 定义规则：单击"![](https://support.huaweicloud.com/usermanual-roma/zh-cn_image_0000001287829872.png)"编辑匹配条件表达式。若表达式数量大于等于3个，可通过"转子层级"对表达式进行分层设置。 - =：等于  - !=：不等于  - pattern：正则表达式  - enum：枚举值，多个参数值之间用英文逗号分隔    - 触发条件和后端降级策略配置可参考上方的默认触发条件和降级策略配置。   例如，开启"降级参数配置"，按顺序添加"rule01"和"rule02"规则，"rule01"关闭"触发条件配置"并且开启"后端降级策略"，"rule02"两者都开启。断路器优先判断"rule01"匹配条件，若匹配则会按照上方配置的默认触发条件开启断路器（rule01内未配置触发条件），并执行rule01内的后端降级策略。若不匹配则会继续判断"rule02"，以此类推。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
      
   
5. 单击"确定"，完成插件策略的创建。
   - 在策略列表中显示已创建的访问控制策略，表示策略创建成功。
   
   - 如果您需要复制已创建的策略，请在已创建策略的"操作"列中单击"克隆"配置参数即可。**克隆策略的名称不能与已创建的策略名称重复。**
    
6. 插件策略创建后，您还需要[为API绑定插件策略]，才能使插件策略对API生效。
   **策略的绑定、解绑、更新会实时生效，不需要重新发布API。**
   
 
 #### 为API绑定插件策略
1. 在"策略管理"页签右上角的过滤条件中选择"断路器"。
2. 在页面中单击策略的名称，进入策略详情页面。
3. 在"关联API"下选择要绑定API的环境，然后单击"绑定API"。
4. 在绑定API弹窗中，勾选要绑定策略的API。 您可以通过指定API分组和API名称，筛选所需API。
   
5. 单击"确定"，完成API与插件策略的绑定。
 
 #### 脚本配置示例
```
{
  "breaker_condition":{
    "breaker_type":"timeout",
    "breaker_mode":"counter",
    "unhealthy_threshold":30,
    "time_window":15,
    "open_breaker_time":15,
    "unhealthy_percentage":51,
    "min_call_threshold":20
  },
  "scope":"share",
  "downgrade_default":{
    "type":"http",
    "passthrough_infos":null,
    "func_info":null,
    "mock_info":null,
    "http_info":{
      "isVpc":false,
      "vpc_channel_id":"",
      "address":"10.10.10.10",
      "scheme":"HTTP",
      "method":"GET",
      "path":"/demo",
      "timeout":5000
    },
    "http_vpc_info":null
  },
  "downgrade_parameters":[
  {
    "name":"reqPath",
    "type":"path",
    "value":"path",
    "disabled":true,
    "focused":true,
    "id":"92002eqbpilg6g"
  },
  {
    "name":"method",
    "type":"method",
    "value":"method",
    "disabled":true,
    "focused":true,
    "id":"tuvxetsdqvcos8"
  }],
  "downgrade_rules":[
  {
    "rule_name":"rule-test1",
    "parameters":[
      "reqPath",
      "method"
    ],
    "match_regex":"[\"reqPath\",\"==\",\"/test\"]",
    "downgrade_backend":{
      "type":"mock",
      "passthrough_infos":null,
      "func_info":null,
      "mock_info":{
        "status_code":200,
        "result_content":"{status: ok}",
        "headers":[]
      },
      "http_info":null,
      "http_vpc_info":null
    },
    "breaker_condition":{
      "breaker_type":"timeout",
      "breaker_mode":"percentage",
      "unhealthy_threshold":30,
      "time_window":15,
      "open_breaker_time":15,
      "unhealthy_percentage":51,
      "min_call_threshold":20
    }
  }]
}
```
