В этой статье в основном изучаются подробные объяснения примеров механизма повторного повторения Java программирования и общих соответствующих примеров кода. Редактор считает, что это довольно хорошо и имеет определенную справочную ценность. Друзья, которые это нужно, могут ссылаться на это.
Функция должна быть реализована в приложении: данные должны быть загружены в службу удаленного хранения, а другие операции выполняются, когда обработка возврата будет успешной. Эта функция не сложна и делится на два шага: первым шагом является вызов обертки удаленной службы отдыха, чтобы вернуть результат обработки в метод обработки; Второй шаг - получить результат первого шага или поймать исключение. Если возникает ошибка или исключение, логика загрузки будет повторена, в противном случае логическая операция будет продолжена.
Основываясь на нормальной логике загрузки, логика функции выполняется путем оценки того, повторяет ли результат возврата или прослушивание решения об исключении. В то же время, чтобы решить неверное выполнение немедленного повторения (при условии, что исключение вызвано нестабильностью внешнего выполнения), логика функции является повторным выполнением для определенного времени задержки.
public void commonretry (map <string, object> dataMap) бросает прерывание {map <string, object> parammap = maps.newhashmap (); Parammap.put («TableName», «Creativetable»); parammap.put ("ds", "20160220"); parammap.put ("dataMap", dataMap); логический результат = false; try {result = uploadtoodps (parammap); if (! result) {thread.sleep (1000); uploadtoodps (параммапа); // попробуйте один раз}} catch (Exception e) {thread.sleep (1000); uploadtoodps (параммапа); // попробуйте один раз}}Приведенное выше решение все еще может быть недействительным для повторения. Чтобы решить эту проблему, постарайтесь увеличить интервал подсчета повторов и повторения, чтобы достичь возможности увеличения повторной вершины.
public void commonretry (map <string, object> dataMap) бросает прерывание {map <string, object> parammap = maps.newhashmap (); Parammap.put («TableName», «Creativetable»); parammap.put ("ds", "20160220"); parammap.put ("dataMap", dataMap); логический результат = false; try {result = uploadtoodps (parammap); if (! result) {reuploadToodps (parammap, 1000l, 10); // задержка множественного повторного повторного периода}} catch (Exception e) {reuploadToodps (parammap, 1000l, 10); // задержка множественной повторной попытки}}}}}}}}}}}}}}}}}}}}}}}}}}Существует проблема с решением 1 и решением 2: нормальная логика и логика повторения тесно связаны. RETRY Logic сильно полагается на результаты выполнения нормальной логики и пассивные триггеры повторения для ожидаемых результатов нормальной логики. Коренная причина повторения часто перегружена сложной логикой, которая может привести к непоследовательному пониманию того, какие проблемы решать для последующих операций и обслуживания. Повмещение трудно гарантировать и не способствует эксплуатации и техническому обслуживанию, потому что повторение дизайна опирается на нормальные логические исключения или повторение основной причины гипотезы.
Итак, есть ли решение, которое можно использовать для отделки нормальной логики и повторной логики, и в то же время оно может дать RETRY Logic стандартизированное решение? Ответ: то есть инструмент повторения, основанный на шаблоне дизайна агента. Мы стараемся использовать соответствующий инструмент для восстановления вышеуказанного сценария.
Конкретное определение шаблона проектирования команды не объясняется. Основная причина заключается в том, что шаблон команды может завершить логику работы интерфейса, выполняя объект, и в то же время внутренняя инкапсуляция логики повторного повторного возмещения не подвергается деталям реализации. Для звонящего это выполнение нормальной логики и достичь цели развязки. Пожалуйста, смотрите конкретную реализацию функции. (Структура диаграммы класса)
Иретрия соглашается с интерфейсом загрузки и повторной попытки, который реализует odpsretry, подобные инкапсулированию логики загрузки ODP, и одновременно инкапсулирует механизм повторения и повторно. В то же время используйте метод восстановления для выполнения операции восстановления в конце.
Наш абонент LogicClient не должен обращать внимание на повторение. Он реализует функцию интерфейса конференции через повторный центр. В то же время повторный попытку ответить и обработать логику повторения. Конкретная обработка повторной попытки повторения передается на реальный класс реализации интерфейса Irty Odpsretry. Приняв командный режим, нормальная логика и логика повторения разделяются элегантно, и в то же время нормальная логика и логика повторения разделяются путем создания роли повреждений, так что повторная попытка имеет лучшую масштабируемость.
Spring-Retry-это инструментарий с открытым исходным кодом, в настоящее время доступная версия 1.1.2.release, которая настраивает шаблон операции повторной попытки, и может устанавливать политики повторной попытки и политики отступления. В то же время повторите экземпляр выполнения, чтобы обеспечить безопасность потока. Конкретные примеры операции следующие:
public void upload (final Map <String, Object> Map) Throws Exception {// Создание экземпляра экземпляра Retrate RetryTemplate retryTemplate = new RetryTemplate (); // Установите политику повторной попытки, в основном установите количество переписей PoomteretryPolicy Policy = new SimpleRetryPolicy (3, Collections. <Class <? Extends Throwable>, Boolean> SingletonMap (Exception.Class, True)); // Установите политику операции повторной резервы, в основном установите интервал повторного перерыва FixbackOffPolicy FixbackOffPolicy = new FixbackOffPolicy (); FixedBackOffPolicy.SetBackOffPeriod (100); retrytemplate.setretrypolicy (политика); retrytemplate.setbackOffPolicy (FixbackOffPolicy); // retrycallback retry экземпляр обратного вызова, чтобы обернуть нормальную логику логики, первое выполнение и повторное выполнение-все это логическое окончательное окончательное retrycallback <Object, Exception> RetryCallback = new RetryCallback <Object, Exception> () {// retryContext restry the Operate Context Convention, объединение Spring-Trapping Public Dowithretr что-нибудь"); Исключение e = uploadToodps (map); System.out.println (context.getRetryCount ()); Бросьте E; // Обратите особое внимание на этот момент. Корень повторения возвращается через исключение}}; // Извлечение процесса повторного повторного периода обычно заканчивается или достигает верхнего предела повторного периода. Final recordyCallback <object> recordyCallback = new RecoveryCallback <Object> () {public Object recovery (context retryContext) throws exection {System.out.println ("Do Recovery Operation"); вернуть ноль; }}; try {// Выполнить метод выполнения с помощью повторного использования, чтобы запустить логическое выполнение retrytemplate.execute (retrycallback, recordyCallback); } catch (Exception e) {e.printstackTrace (); }}Анализируя код дела, Retrytemplate принимает роль исполнителя Retry. Он может установить SimpleRetryPolicy (политика повторной попытки, установить верхний предел повторного периода, повторная корневая сущность), фиксированного возвратаполици (фиксированная политика резерва, установить интервал времени для повторного отступления). Retrytemplate выполняет операции посредством выполнения, и два экземпляра класса, Retrycallback и ExtremyCallback, необходимы для подготовки двух экземпляров класса. Первый соответствует экземпляру логики повторного вызова и завершает нормальные функциональные операции. RecordyCallback реализует экземпляр операции восстановления в конце всей операции выполнения.
Выполнение повторного повторного использования безопасно, а логика реализации использует Threadlocal для сохранения контекста выполнения RetryContext в каждом экземпляре выполнения.
Хотя инструмент пружины может элегантно реализовать повторную попытку, существует два недружественных дизайна: один из них заключается в том, что повторная сущность ограничена подклассом броски, что указывает на то, что повторная попытка направлена на резкие функциональные исключения в качестве дизайнерской предпосылки, но мы хотим почувствовать подключение к объекту данных в качестве повторного объекта, но структура пружины должна быть набрасываемой подкласс. Другим является объект утверждения, который повторяет основную причину, использует экземпляр Exception Exception Dowithretry, который не соответствует конструкции возврата нормальных внутренних утверждений.
Весенняя ретрита адвокатов повторяют методы при аннотации. Логика повторения выполняется синхронно. «Отказ» перетасовки нацелен на бросание. Если вы хотите определить, нужно ли вам повторно повторно, исходя из определенного состояния возврата, вы можете только судить о возвратной стоимости самостоятельно, а затем явно бросить исключение.
Абстракция весны для повторения
«Аннотация» - это необходимое качество для каждого программиста. Для меня с посредственной квалификацией нет лучшего способа улучшить, чем подражать и понимание отличных исходных кодов. Чтобы сделать это, я переписываю его основную логику ... давайте посмотрим на абстракцию Spring Retry для «Retry».
Связанный интерфейс Spring Retry.jpg
Инструмент повторения повторения гуавы похож на пружину. Это завершает нормальную логическую попытку, определяя роль повторяющего. Тем не менее, Retryer Guava имеет лучшее определение политики. На основании поддержки количества времени повторной повторной попытки и контроля частоты повторного повторного определения, он может быть совместимы с определением источника повторной попытки, которое поддерживает множество исключений или пользовательских объектов объекта, что дает функцию повторного повторного повторного повторного повторного использования. Рырячик гуавы также безопасен. Логика вызова входа использует метод вызова java.util.concurrent.callable. Пример кода заключается в следующем:
public void uploadodps (окончательная карта <строка, объект> map) {// retryerBuilder Создание повторного повторного повторного экземпляра, вы можете установить источник повторной попытки и поддержать несколько источников повторения, вы можете настроить количество времени повторного повторного периода, и вы можете настроить повторное время ожидания <boolean> retryer = retryerbuilder. .retryifexception () .// set Исключение Retry Source Retryifresult (новый предикат <boolean> () {// установить исходный источник повторного повторного использования сегмента, @override public boolean (логическое состояние) {// Специальное примечание: это применение возвращает true, что означает, что Retry должен быть отличается от полунантики. .withstopstrategy (spotstrategies.stopafterattemptempement (5)) // set stry 5 раз, и вы также можете установить время повторного времени. java.util.concurrent.callable <v>, так что выполнение-это планочный результат. Исключение (e); } catch (executionException e) {} catch (retryException ex) {}}Образец принципиального анализа кода:
RetryerBuilder - это заводской создатель, который может настроить источник повторной попытки и может поддерживать несколько источников повторной попытки, может настроить количество времени повторного повторного периода или повторного тайм -аута и может настроить интервал времени ожидания для создания экземпляра повторного повторения.
Источник повторной попытки повторного повторного повторного определения поддерживает объекты исключения исключения и пользовательские объекты утверждения и устанавливается с помощью повторной жизни и повторного повторного определения, он поддерживает множественные и совместим одновременно.
Время ожидания и ограничения повторной попытки внедряется повторная проверка, используя различные классы политики, а функции времени ожидания могут поддерживать неинтервальные и фиксированные режимы интервала.
Повторящий является экземпляром повторного повторного центра, который выполняет логику операции с помощью метода вызова, и инкапсулирует операцию источника повторной попытки.
Элегантная общность и принцип повторения
Нормально и повторно элегантно отделен, повторяя, утверждая, что условные экземпляры или логические экземпляры исключения являются среды для связи между ними.
Согласитесь с интервалами повторения, стратегиях дифференциальной повторной попытки и установите время для повторной проверки для дальнейшего обеспечения эффективности повторной попытки и стабильности процесса повторной попытки.
Все используют шаблон проектирования команды, и соответствующие логические операции завершены путем делегирования объекта повторного риска, а логика повторной попытки реализована внутри.
Инструменты Spring-Tryer и Guava-Tryer-это защитники нити и могут поддерживать правильность логики повторной попытки в одновременных бизнес-сценариях.
Применимы
В функциональной логике существуют нестабильные сценарии зависимости, и необходимо использовать повторную попытку, чтобы получить ожидаемый результат или попытаться повторить логику, не заканчивая немедленно. Например, доступ к удаленному интерфейсу, доступ к загрузке данных, проверка загрузки данных и т. Д.
Существуют сценарии, которые необходимо повторить для сценариев исключений, и в то же время надеждается отделить нормальную логику и логику повторной попытки.
Для взаимодействий, основанных на средах данных, схемы повторения также могут рассматриваться в сценариях, которые требуют повторного опроса для обнаружения логики выполнения.
Выше приведено все подробное объяснение примера повторной попытки программирования Java. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!