-
Notifications
You must be signed in to change notification settings - Fork 9
Owen edited this page Apr 26, 2019
·
7 revisions
微服务里熔断是绝不可少的,而C#里最有名的就是Polly里,Uragano默认就采用了Polly。
service.AddUragano(context.Configuration, builder =>
{
builder.AddServer();
builder.AddConsul();
builder.AddCircuitBreaker<CircuitBreakerEvent>();
});
其中CircuitBreakerEvent是自定义的熔断事件通知处理程序,是非必选的,你也可以通过实现ICircuitBreakerEvent接口来自定义。
"Uragano": {
"CircuitBreaker": {
"Polly": {
"timeout": 2000,
"retry": 3,
"ExceptionsAllowedBeforeBreaking": 10,
"DurationOfBreak": 60000,
"MaxParallelization": 0,
"MaxQueuingActions": 0
}
}
}
配置 | 说明 |
---|---|
Timeout | 执行超时时间 |
Retry | 重试次数 |
ExceptionsAllowedBeforeBreaking | 出现多少次异常就打开断路器 |
DurationOfBreak | 断路器打开多久后尝试关闭 |
MaxParallelization | 允许最大的并发数 |
MaxQueuingActions | 允许排队任务的最大数量 |
局部策略可以通过CircuitBreakerAttribute自定义属性注入,相比全局策略,局部策略多了两个配置
配置 | 说明 |
---|---|
FallbackExecuteScript | 降级时执行的csharp脚本 |
ScriptUsingNameSpaces | 执行降级脚本需要引入的命名空间 |
如果没有设置降级脚本,当服务降级是就会返回服务方法返回值类型的默认值。
如果有个别服务不需要用到熔断,你可以使用NonCircuitBreakerAttribute自定义属性禁用熔断
- 熔断一般都是针对客户端的,所以我们的自定义数据必须加在服务接口上才会生效。
- 为了保证服务的高可用,每个服务都会运行多个实例,如果启用了重试机制,我们在调用一个服务时出现问题,Uragano会自动切换到下一个实例进行调用。为了达到这样的效果,Uragano就必须自己实现负载。