故障注入
pigeon提供故障注入功能来模拟在调用出现异常时的处理测试,由客户端拦截器FaultInjectionFilter完成,具体有两种故障注入方式,分别为:
- EXCEPTION:抛出注入异常FaultInjectionException
- 超时:尝试模拟请求特定时长,然后抛出RequestTimeoutException超时异常。
相关的配置如下:
- pigeon.fault.injection.enable:故障注入全局开关
- pigeon.fault.injection.configs故障注入配置
# 配置示例如下:
{
"requestKey": {
"enable": true,
"type": "EXCEPTION",
"maxDelay": 100,
"randomDelay": true,
"sample": true,
sampleRate: 0.1
}
}
其中requestKey为服务url或服务url+’#’+methodName,优先匹配后者,value为FaultInjectionConfig,里面的属性定义如下:
public static class FaultInjectionConfig implements Serializable {
private boolean enable = true; // 是否启动依赖注入
private String type = FaultInjectionType.EXCEPTION.getType(); // 1. exception 2. delay
private int maxDelay; // time_unit ms
private boolean randomDelay = false; // 是否随机延时(0-maxDelay ms)
private boolean sample = false; // 是否按比例采样注入错误
private float sampleRate; // 采样注入比率
}
在FaultInjectionFilter中,pigeon根据上面的两个配置,判断客户端对当前的方法调用是否启用依赖注入,具体行为通过FaultInjectionManager#getAction根据配置获取:
public FaultInjectionAction getAction(String requestKey) {
FaultInjectionConfig config = configMap.get(requestKey);
if (config != null) {
FaultInjectionAction action = new FaultInjectionAction();
// 如果采样,随机百分比判断是否触发
if (!config.getSample() || (config.getSample() &&