Пакет circuit-breaker від @algoyounes додає патерн circuit breaker у Laravel. Він відстежує збої для іменованого сервісу та запобігає каскадним відмовам, коли залежний сервіс недоступний:
onOpen, onSuccess)X-Circuit-KeyКожен сервіс має власне іменоване коло. Можна прив’язати колбеки, щоб реагувати на зміну стану кола або на успішні/неуспішні виклики:
$circuit = $this->circuitManager->forService('payment-service');
$circuit->onOpen(function (CircuitTransition $transition) {
Log::warning('Payment service circuit opened', [
'state' => $transition->getState(),
]);
});
$circuit->onSuccess(function (CircuitResult $result, CircuitTransition $transition) {
// Called when a wrapped call succeeds
});
$circuit->onFailure(function (CircuitResult $result, CircuitTransition $transition) {
// Called when a wrapped call fails
});
Кожен колбек спрацьовує на певну подію: наприклад, onOpen виконується, коли коло переходить у стан open (блокує виклики через помилки), а onSuccess — після успішного обгорнутого виклику. Ключ service-name ізолює стан для кожного сервісу, дозволяючи відстежувати залежності окремо.
Після налаштування кола обгорніть виклики сервісу в run(). Circuit breaker вирішить, дозволити, заблокувати або протестувати виклик залежно від поточного стану:
$circuit->run(function () {
return Http::post('https://payments.example.com/charge', $payload);
});
Також можна використати CircuitManager без створення екземпляра CircuitBuilder:
$this->circuitManager->run('payment-service', function () {
return Http::post('https://payments.example.com/charge', $payload);
});
Якщо ваш проєкт використовує Guzzle напряму, пакет містить middleware, яке читає заголовок X-Circuit-Key, щоб визначити, яке коло застосувати:
use AlgoYounes\CircuitBreaker\Middleware\GuzzleMiddleware;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
$stack = HandlerStack::create();
$stack->push(GuzzleMiddleware::create());
$client = new Client(['handler' => $stack]);
$response = $client->get('https://api.example.com', [
'headers' => [
'X-Circuit-Key' => 'external-api',
],
]);
Дізнатися більше про пакет можна на GitHub: algoyounes/circuit-breaker.
Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!
Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!
Laravel Livewire випустив нову версію 3.6, яка приносить з собою цікаві HTML-директиви для управління видимістю DOM-елементів і JavaScript-діями. Досліджуйте нові можливості Livewire, що допоможуть вам створити ще більш інтерактивні користувацькі інтерфейси!