Введение в начало работы с sisyphus, лучшей инфраструктурой повторных попыток Java

задняя часть распределенный Открытый исходный код

What is Sisyphus

sisyphus Сочетая в себе преимущества spring-retry и gauva-retry, он также очень гибок в использовании.

Почему выбирают это имя

Я думаю, что retry делает что-то похожее на Sisyphus.

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

Нужно представить себе радость Сизифа. - Камю

другие причины

видел раньшеjava retryсоответствующие рамки, Хотя я думаю, что у него много недостатков. Но нет желания повторять колесо, чувствую, что это бесполезно.

Конечно, за это время я также читал дизайн интерфейса Netty и дизайн интерфейса Hibernate-Validator, и я думаю, что это очень гениально.

Я чувствовал, что, объединив эти вещи, я мог бы написать хороший фреймворк, поэтому я его и написал.

По крайней мере, Сизиф счастлив.

О версии

На этот раз версия фреймворка использует более консервативный подход, используя0.0.X.

Есть две причины:

(1) Я думаю, что ранняя стадия вышла из экспериментальной стадии. Код незрелый, и самотестирования недостаточно. Так что не подходит для производства.

(2) Таким образом, его можно быстро повторять, а функции версии нельзя повторять в течение длительного времени в погоне за лучшим.

Функция версии

Я использовал 5 версий и реализовал основные возможности:

(1) Декларативный вызов на основе свободного интерфейса

(2) Реализация прокси на основе аннотаций

(3) Реализация интеграции Spring

(4) Внедрение пользовательских аннотаций

незавершенная работа

  • Более удобный класс инструментов.

  • Работа с документацией

  • тестовый код

Чувствовать

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

Почему выбирают сизиф

Как разработчики мы обычно выбираем более известные фреймворки.

Например, guava-retry spring-retry.

Или просто напишите сами.

Почему бы не guava-retry/spring-retry

java retryВ этой статье я перечислил общие реализации Помимо двух вышеуказанных фреймворков описаны и недостатки.

плюсы и минусы повторной попытки гуавы

преимущество

  • Гибкое использование

  • свободное элегантное письмо

  • Обеспечьте достаточное количество реализаций

недостаток

  • Нет реализации на основе аннотаций по умолчанию

  • Дизайн стратегии повторных попыток не является дружественным

spring-retry

преимущество

  • Простой в использовании

недостаток

  • Условие повторной попытки одно

  • Повторите попытку, ожидая одной стратегии

  • Невозможно настроить аннотации

Почему бы не написать самому

личные чувства

Я, как разработчик, обычно, если честно, вижу повторы.

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

Потому что время не позволяет.

Если вы более усердны, вы можете выбрать spring-retry/guava-retry. Если вы знакомы с их плюсами и минусами.

если вы хотите создать

Все реализации sisyphus основаны на интерфейсе.

Вы можете полностью реализовать свою собственную реализацию, и все в принципе полностью заменяемо.

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

сизиф делает больше

Вдохновение для нетти

Обратитесь к дизайну netty, чтобы убедиться в согласованности реализации интерфейса.

А sisyphus делает больше и обеспечивает согласованность между интерфейсами и аннотациями.

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

hibernate-validator

Автор hibernate-validator — один из немногих известных мне разработчиков, которые отлично умеют применять аннотации Java. (хотя мало что известно)

Пользовательские аннотации изучаются из этой структуры.

с весной

Spring в основном неотделим от нашего кода, поэтому вы можете легко комбинировать spring.

как если бы вы использовали spring-retry.

быстрый старт

нужно

jdk1.7+

maven 3.x+

импорт maven

sisyphus использует maven для управления банками,

<plugin>
    <groupId>com.github.houbb</groupId>
    <artifactId>sisyphus-core</artifactId>
    <version>0.0.6</version>
</plugin>

кодирование

В качестве вводного примера мы сначала представим простое и гибкое декларативное программирование.

public void helloTest() {
    Retryer.<String>newInstance()
            .callable(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    System.out.println("called...");
                    throw new RuntimeException();
                }
            }).retryCall();
}

Введение в код

Retryer.<String>newInstance()Создайте экземпляр класса начальной загрузки, String — это тип возвращаемого значения вызываемого метода, который нужно повторить.

callable()Указывает реализацию метода, которую необходимо повторить.

retryCall()Инициировать повторный вызов.

информация журнала

called...
called...
called...

и некоторая информация об исключении.

Эквивалентная конфигурация

Приведенная выше конфигурация на самом деле имеет много значений по умолчанию, а именно:

/**
 * 默认配置测试
 */
@Test(expected = RuntimeException.class)
public void defaultConfigTest() {
    Retryer.<String>newInstance()
            .maxAttempt(3)
            .listen(RetryListens.noListen())
            .recover(Recovers.noRecover())
            .condition(RetryConditions.hasExceptionCause())
            .retryWaitContext(RetryWaiter.<String>retryWait(NoRetryWait.class).context())
            .callable(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    System.out.println("called...");
                    throw new RuntimeException();
                }
            }).retryCall();
}

Все эти значения по умолчанию настраиваются.

Например, когда запускать повторную попытку? Сколько раз повторять? Как часто запускать повторную попытку? Они будут подробно объяснены в следующих главах.

резюме

В этой статье кратко рассказывается, почему разработана структура повторных попыток и как начать работу.

java retry framework sisyphus адрес с открытым исходным кодом

Я надеюсь, что эта статья будет вам полезна, если она вам понравилась, ставьте лайк, собирайте и пересылайте.

Я старая лошадь, и я с нетерпением жду встречи с вами в следующий раз.

NO_SIGN.png