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 адрес с открытым исходным кодом
Я надеюсь, что эта статья будет вам полезна, если она вам понравилась, ставьте лайк, собирайте и пересылайте.
Я старая лошадь, и я с нетерпением жду встречи с вами в следующий раз.