В распределенных системах, чтобы обеспечить прочную согласованность распределенных транзакций данных при вызове интерфейса RPC или отправки MQ, вы проведете операцию повторной попытки, чтобы предотвратить тайм -аут запроса на джатвитель сети. Наиболее распространенным способом повторения является MQ, но если вы не введете MQ в своем проекте, это будет неудобно. Эта статья в основном представляет, как использовать Spring Retry для реализации операций повторной попытки.
1. Добавить зависимости Maven
<depervice> <groupid> org.springframework.retry </groupid> <artifactid> пружина </artifactid> <sersion> 1.1.2.release </version> </depertive> <dehyederiny> <groupid> org.aspectj </Ground> <artifactid> asceJweaver </artifactid> <serse> 1.5.
2. Добавить конфигурацию повторной попытки в запуск
@Springbootapplication @enableretry public class application {public static void main (string [] args) {springapplication.run (application.class, args); }} 3. Напишите службу
@Service public class remoteService {private static final logger logger = loggerfactory.getLogger (testController.class); @Retryable (value = {businessexception.class}, maxattempts = 3, backoff = @backoff (dower = 5000l, multiplier = 2)) public void call () throws exception {logger.info ("сделай что -нибудь ..."); бросить новое BusinessException ("Exception" RPC Call "); } @Recover public void recover(BusinessException e) { logger.info(" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4. Напишите контроллер
@RestController @Requestmapping ("/test") public class testController {private Static Final Logger = loggerFactory.getLogger (testController.class); @Autowired Private RemotEservice RemotEservice; @Requestmapping ("/test") public String login () бросает Exception {remoteService.call (); return string.valueof ("11"); } 5. Посетите http: // localhost: 8080/тест/тест
6. Испытательный журнал
2017-07-25 19:28:07 [Информация]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remoteService.java:19)] Сделай что-нибудь ...
2017-07-25 19:28:12 [Информация]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remoteService.java:19)] Сделай что-нибудь ...
2017-07-25 19:28:22 [Информация]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.call (remoteService.java:19)] Сделайте что-нибудь ...
2017-07-25 19:28:22 [Информация]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.recover (remoteService.java:24)] ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2017-07-25 19:28:22 [Info]-[http-nio-53602-exec-1]-[com.test.retry.service.remoteservice.recover (remoteService.java:25)]
7. Связанные инструкции по конфигурации
@Enableretry Вы можете попробовать еще раз ? Когда свойство ProxyArgetClass верно, используйте прокси Cglib. Стандартные аннотации Java используются по умолчанию. В Spring Boot этот параметр может быть записан во входе в программу.
@Retryable метод маркировки этой аннотации будет повторен, когда произойдет исключение
Значение: укажите класс исключений, который будет обработан
Включите: Указанный класс исключений, обрабатываемый класс исключений, такой же, как и значение, а по умолчанию пусто. Когда исключение также пустое, все исключения по умолчанию как все
Исключить: укажите, что исключения не обрабатываются, по умолчанию пустое, когда включение также пусто, по умолчанию все исключения
MAXATTEMPTS: максимальное количество рис. По умолчанию 3 раза
Бэкваном: Попробьте политику ожидания. Используйте аннотацию @backoff по умолчанию
@Backoff повторно политика ожидания <br /> Когда параметры не установлены, FiredbackOffPolicy используется по умолчанию (укажите время ожидания) и повторно ожидает 1000 мс.
Установите задержку, используйте FixbackOffPolicy (укажите время ожидания) и попробуйте время ожидания, которое будет заполнено снова
При установке задержки и MaxDealy, попробуйте еще раз и дождитесь однородного распределения между этими двумя значениями
Установите задержку, максимальную и мультипликатор, используйте ExponentialBackOffPolicy (реализация интервала экспоненциального повторного повторения), мультипликатор определяет задержку множественным, таким как задержка = 5000L, мультипликатор = 2, первый повторный попытки составляет 5 секунд, второй раз составляет 10 секунд, а третье время - 20 секунд ...
@Recover используется для неудачного метода повторения @stryable. Параметры метода этой аннотации должны быть исключением, брошенным @retryable, в противном случае он не будет распознан. Обработка журнала может быть выполнена в этом методе.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.