• Время чтения ~1 мин
  • 06.03.2023

Flaky - это пакет Laravel от Aaron Francis, который поможет вам справиться с периодическими сбоями, вызванными ненадежными третьими лицами.

Иногда у меня есть код, который полагается на третьи стороны, и мне все равно, если он время от времени терпит неудачу, я просто хочу получать оповещения, если он не преуспел в течение дня или около того.

Поэтому я написал небольшой пакет для обработки этих неуклюжих команд и неровных обратных вызовов.

Шелушащийся, для Ларавеля. pic.twitter.com/YCpJyOqSIx

— Aaron Francis (@aarondfrancis) March 2, 2023

В некоторых случаях вам все равно, если сторонний код выйдет из строя; вы можете обернуть его в flaky вызов следующим образом:

Flaky::make('my-flaky-code')
    ->allowFailuresForAnHour()
    ->run(function() {
        if (Lottery::odds(1 / 5)->choose()) {
            throw new Exception("Oops");
        }
    });

В примере с файлом readme исключения будут отключены, если операция не завершилась в течение часа. Код использует my-flaky-code, передаваемый методу make(), используемому в качестве ключа кэша. На момент написания статьи Flaky использует драйвер кэша по умолчанию в вашем приложении Laravel для кэширования отслеживания flaky code.

В приведенном выше примере, если вызов удался, крайний срок на час будет отдыхом. Другими словами, каждый последующий успех будет отодвигать счетчик неудач назад на целый час в приведенном выше примере.

Пакет Flaky имеет различные методы на основе времени, которые можно использовать для настройки временных рамок для ваших конкретных потребностей:

$flaky->allowFailuresForAMinute();
$flaky->allowFailuresForMinutes(20);
$flaky->allowFailuresForAnHour();
$flaky->allowFailuresForHours(5);
$flaky->allowFailuresForADay();
$flaky->allowFailuresForDays(3);

// Full custom
$flaky->allowFailuresFor(
    seconds: $seconds,
    minutes: $minutes,
    hours: $hours,
    days: $days
);

Этот пакет также позволяет выполнять последовательные сбои на основе подсчета или общее количество сбоев. Можно также комбинировать счетчики на основе времени со счетчиками:

$flaky->allowConsecutiveFailures(10)->run(/* ... */);
$flaky->totalFailures(10)->run(/* ... */);

$flaky
    ->allowFailuresForMinutes(20)
    ->totalFailures(5)
    ->run(fn () => doStuff());

Другие замечательные функции этого пакета включают следующее:

  • Немедленные повторные
  • попытки Сообщения о сбоях вместо создания исключения
  • Доступ к результату выполнения flaky code
  • Использование flaky в Artisan с FlakyCommand

Вы можете узнать больше об этом пакете, получить полные инструкции по установке и просмотреть код source на GitHub.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297