【Pigeon源码阅读】高可用之故障注入实现原理(十三)

故障注入

pigeon提供故障注入功能来模拟在调用出现异常时的处理测试,由客户端拦截器FaultInjectionFilter完成,具体有两种故障注入方式,分别为:

  1. EXCEPTION:抛出注入异常FaultInjectionException
  2. 超时:尝试模拟请求特定时长,然后抛出RequestTimeoutException超时异常。

相关的配置如下:

  1. pigeon.fault.injection.enable:故障注入全局开关
  2. 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() && 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值