容错
容错的原理为:根据重试时间间隔的是否固定,分为固定间隔重试和指数间隔重试两种策略,默认重试策略为固定间隔重试。
- Java Chassis的容错作用于微服务消费者,需要微服务应用集成容错模块,启用bizkeeper处理链。
配置示例如下:
servicecomb: handler: chain: Consumer: default: bizkeeper-consumer
在POM中添加如下依赖:
<dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>handler-bizkeeper</artifactId> <version>${project.version}</version> </dependency>
详细说明请参考流量特征治理。
此处以微服务开发框架Java Chassis 2.x版本为例介绍。3.x版本配置详情请参考流量特征治理。
- Spring Cloud通过Aspect拦截RequestMappingHandlerAdapter实现了容错,集成Spring Cloud Huawei以后,默认集成了客户端容错模块spring-cloud-starter-huawei-governance, 只需要通过配置开启具体的客户端容错策略。
servicecomb: matchGroup: AllOperation: | matches: - apiPath: prefix: "/" retry: AllOperation: | maxAttempts: 3 # 重试次数 retryOnSame: 1 # 重试请求发起的实例 retryOnResponseStatus: # 重试错误码 - 502 - 503
默认策略是在异常错误码为502、503情况下生效,1.11.4-2021.0.x/1.11.4-2022.0.x版本开始支持响应头header的特殊场景生效。
响应头header设置key默认为"X-HTTP-STATUS-CODE",也支持自定义设置,配置如下:
spring: cloud: servicecomb: governance: response: header: status: key: 'X-HTTP-EEROR-STATUS-CODE'
同样响应头header中设置的响应码也支持自定义,但是需要在容错策略中增加对应的错误码,例如设置X-HTTP-STATUS-CODE=511,那么错误码中增加511错误码,配置如下:
servicecomb: matchGroup: AllOperation: | matches: - apiPath: prefix: "/" retry: AllOperation: | maxAttempts: 3 # 重试次数 retryOnSame: 1 # 重试请求发起的实例 retryOnResponseStatus: # 重试错误码 - 502 - 503 - 511
策略执行顺序为优先判断响应码,如果异常响应码满足策略设置,容错开启;响应码不满足后,再判断header设置的响应码是否满足条件。