idealizetecnologia/circuit-breaker-php

PHP 的断路器

2.0.2 2019-10-07 13:04 UTC

This package is not auto-updated.

Last update: 2024-09-17 14:58:42 UTC


README

Build Status Scrutinizer Code Quality Code Intelligence Status Total Downloads

有关此模式的更多信息,请参阅 此处

此实现目前只支持 redis 适配器

从 composer 开始

composer require leocarmo/circuit-breaker-php

Redis 适配器

第一个参数是 redis 连接,第二个是你的产品名称,为了避免与使用相同 redis 的其他产品发生键冲突,请使用 redis 命名空间。

use LeoCarmo\CircuitBreaker\CircuitBreaker;

// Connect to redis
$redis = new \Redis();
$redis->connect('localhost', 6379);

$adapter = new \LeoCarmo\CircuitBreaker\Adapters\RedisAdapter($redis, 'my-product');

// Set redis adapter for CB
CircuitBreaker::setAdapter($adapter);

设置断路器设置

这不是必需的,将使用默认值

// Configure settings for CB  
CircuitBreaker::setGlobalSettings([  
  'timeWindow' => 60, // Time for an open circuit (seconds)  
  'failureRateThreshold' => 50, // Fail rate for open the circuit  
  'intervalToHalfOpen' => 30, // Half open time (seconds)  
]);

为特定服务配置设置

// Configure settings for specific service
CircuitBreaker::setServiceSettings('my-custom-service', [  
  'timeWindow' => 30, // Time for an open circuit (seconds)  
  'failureRateThreshold' => 15, // Fail rate for open the circuit  
  'intervalToHalfOpen' => 10, // Half open time (seconds)  
]);

检查断路器是否可用(关闭)

每个检查针对特定服务。因此,您可以在同一应用程序中具有多个服务,当一个断路器打开时,其他服务可以正常工作。

// Check circuit status for service: `my-service`
if (! CircuitBreaker::isAvailable('my-service')) {  
  die('Circuit is not available!');  
}

记录成功和失败

// Usage example for success and failure  
try {  
  Service::execute('something');  
  CircuitBreaker::success('my-service');  
} catch (\ServiceException $e) {  
  CircuitBreaker::failure('my-service');  
  die($e->getMessage());  
}

鸣谢