Skip to content

About

Resilience-библиотека для OneScript, предоставляющая набор стратегий: Retry, Timeout, Rate Limiter, Circuit Breaker, Bulkhead и Fallback

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

93 Commits

Folders and files

Repository files navigation

resilience

Release Тестирование Used by


Resilience-библиотека для повышения отказоустойчивости вызовов в OneScript.

Позволяет применять к пользовательскому Действие или лямбда-выражению стратегии повтора, предохранителя, ограничения параллелизма, таймаута, ограничения вызовов и запасного сценария (Fallback) в составе пайплайна.

Что есть в пакете

Пайплайн:

Стратегии:

Расширение:

Когда использовать

  • когда внешние вызовы могут временно завершаться ошибкой и нужны повторные попытки;
  • когда нужно ограничить время выполнения, параллелизм или частоту вызовов;
  • когда важно собрать несколько стратегий отказоустойчивости в один пайплайн с предсказуемым порядком выполнения.

Установка

Для работы требуется OneScript 2.0.0 или новее.

opm install resilience

Быстрый старт

Ниже показан минимальный пример запуска пользовательского Действие через пайплайн отказоустойчивости. Пайплайн включает предохранитель, ограничение вызовов и повторные попытки.

#Использовать resilience

Сервис = Новый МойНестабильныйСервис();

Пайплайн = Новый ПайплайнОтказоустойчивости()
    .ДобавитьПредохранитель(2, 500)
    .ДобавитьОграничениеВызовов(5, 1000)
    .ДобавитьПовтор(3, 50);

Операция = Новый Действие(Сервис, "ПолучитьДанные");

Результат = Пайплайн.Запустить(Операция);

Вместо Действие можно передать и лямбда-выражение:

ПараметрыОперации = Новый Массив();
ПараметрыОперации.Добавить("left");
ПараметрыОперации.Добавить("right");

Результат = Пайплайн.Запустить(
    "(ПервыйПараметр, ВторойПараметр) -> Возврат СтрШаблон(""%1:%2"", ПервыйПараметр, ВторойПараметр)",
    ПараметрыОперации
);

Подробности о лямбда-выражениях и передаче параметров см. в отдельном руководстве.

Асинхронный запуск

Пайплайн можно запускать асинхронно через ЗапуститьАсинх(). Метод возвращает Обещание из библиотеки async.

#Использовать resilience

Сервис = Новый МойНестабильныйСервис();
Операция = Новый Действие(Сервис, "ПолучитьДанные");

Пайплайн = Новый ПайплайнОтказоустойчивости()
    .ДобавитьПовтор(2, 50)
    .ДобавитьТаймаут(1000);

Обещание = Пайплайн.ЗапуститьАсинх(Операция);
Результат = Обещание.Получить();

Лямбда-выражение можно использовать и в асинхронном запуске:

Обещание = Пайплайн.ЗапуститьАсинх(
    "(Имя) -> Возврат СтрШаблон(""Привет, %1!"", Имя)",
    "Мир"
);

Результат = Обещание.Получить();

Сборка пайплайна из готовых стратегий

Этот вариант удобен, когда стратегии нужно переиспользовать, хранить отдельно или настраивать по шагам перед добавлением в пайплайн.

Note

Порядок важен: первая добавленная стратегия становится внешней оберткой для следующих.

В этом примере операция выполняется внутри Таймаут, Таймаут — внутри Предохранитель, Предохранитель — внутри Повтор, а вся цепочка обернута ЗапаснойСценарий.

#Использовать resilience

Сервис = Новый МойНестабильныйСервис();

// Настройка стратегий
Повтор = Новый СтратегияПовтора()
    .УстановитьМаксимумПовторов(3)
    .УстановитьЗадержку(50);

Предохранитель = Новый СтратегияПредохранителя()
    .УстановитьПорогОшибок(2)
    .УстановитьДлительностьРазмыкания(500);

Таймаут = Новый СтратегияТаймаута(1500);

ЗапаснойСценарий = Новый СтратегияЗапасногоСценария(
    "(КонтекстОшибки) -> Возврат ""Резервный результат"""
);

// Сборка пайплайна
Пайплайн = Новый ПайплайнОтказоустойчивости()
    .ДобавитьСтратегию(ЗапаснойСценарий)
    .ДобавитьСтратегию(Повтор)
    .ДобавитьСтратегию(Предохранитель)
    .ДобавитьСтратегию(Таймаут);

// Запуск операции
Операция = Новый Действие(Сервис, "ПолучитьДанные");
Результат = Пайплайн.Запустить(Операция);

Кастомные стратегии

Пайплайн поддерживает не только встроенные, но и пользовательские стратегии. Рекомендованный контракт и пример реализации см. в документации по кастомным стратегиям.

Разработка

Установите зависимости:

opm install -l --dev

Запустите тесты:

oneunit execute

Соберите пакет:

opm build .

About

Resilience-библиотека для OneScript, предоставляющая набор стратегий: Retry, Timeout, Rate Limiter, Circuit Breaker, Bulkhead и Fallback

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages