/master/zh-CN/service-governance/breaker.html

TOC

熔断器

三种状态

熔断器有三种状态,开启、关闭、半开,每种状态都有不同对应的操作,目前内部使用状态模式实现的。

  • 关闭状态 正常逻辑处理,当失败次数达到上限可以切换到开启状态
  • 开启状态 服务降级处理,一定时间延迟后尝试切换到半开状态
  • 半开状态 正常逻辑处理,当业务失败次数达到一定值,切换到开启,当业务成功次数达到一定值,切换到关闭。

注解

@Breaker

定义熔断器

  • name 熔断器名称,缺省默认是类名

定义熔断器

定义熔断器需要继承CircuitBreaker类,配置属性信息,配置信息可以通过@value和@Config两个注解实现,注解详解请看配置章节。

/**
 * the breaker of user
 *
 * @Breaker("user")
 */
class UserBreaker extends CircuitBreaker
{
    /**
     * The number of successive failures
     * If the arrival, the state switch to open
     *
     * @Value(name="${config.breaker.user.failCount}", env="${USER_BREAKER_FAIL_COUNT}")
     * @var int
     */
    protected $switchToFailCount = 3;

    /**
     * The number of successive successes
     * If the arrival, the state switch to close
     *
     * @Value(name="${config.breaker.user.successCount}", env="${USER_BREAKER_SUCCESS_COUNT}")
     * @var int
     */
    protected $switchToSuccessCount = 3;

    /**
     * Switch close to open delay time
     * The unit is milliseconds
     *
     * @Value(name="${config.breaker.user.delayTime}", env="${USER_BREAKER_DELAY_TIME}")
     * @var int
     */
    protected $delaySwitchTimer = 500;
}

RPC使用

RPC中默认是根据@Reference注解指定的服务名称,加载名称相同的熔断器,进行逻辑处理

任意使用

可以再任意逻辑中使用熔断器

\breaker('name')->call($handler, $params, $fallback);
  • $handler 可调用的callback
  • $params 调用传递的参数
  • $fallback 参考服务降级章节的普通服务降级
progress-bar