Flaky - это пакет Laravel от Aaron Francis, который поможет вам справиться с периодическими сбоями, вызванными ненадежными третьими лицами.
— Aaron Francis (@aarondfrancis) March 2, 2023Иногда у меня есть код, который полагается на третьи стороны, и мне все равно, если он время от времени терпит неудачу, я просто хочу получать оповещения, если он не преуспел в течение дня или около того.
Поэтому я написал небольшой пакет для обработки этих неуклюжих команд и неровных обратных вызовов.
Шелушащийся, для Ларавеля. pic.twitter.com/YCpJyOqSIx
В некоторых случаях вам все равно, если сторонний код выйдет из строя; вы можете обернуть его в 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.