Конфигурация механизма Springcloud Retry
Прежде всего, повторение здесь не является повторной попыткой после сообщений об ошибке, а повторение другого экземпляра после того, как клиент балансировки нагрузки обнаруживает, что экземпляр удаленного запроса недоступен.
@Bean@loadbalancedresttemplate resttemplate () {httpcomponentsclienthttprequestfactory httprequestfactory = new httpcomponentsclienthttprequestfactory (); httprequestfactory.setreadtimeout (5000); httprequestfactory.setConnecttimeout (5000); вернуть новый Resttemplate (httprequestfactory);}Файн -пробный механизм
Feign повторно конфигурации с помощью повторного повторного перепончика, упакованного сам по себе, а по умолчанию 5 раз раза
пакет Feign; Import Static java.util.concurrent.timeUnit.seconds;/*** клонирован для каждого призывого в {@link client#Execute (request, feign.request.options)}. * Реализации могут сохранить состояние, чтобы определить, должны ли операции повторения продолжаться или нет. * /public interface reryer расширяет клонируемый { /*** Если повторная попытка разрешена, вернуться (возможно после сна). В противном случае распространять исключение. */ void continaorPropagate (stryableException e); Retryer Clone (); Общественный статический класс по умолчанию реализует повторный размер {Private Final Int Maxattempts; частный последний длительный период; частный финальный длинный максимальный максимальный; int попытка; Длинные Sleptformillis; public default () {this (100, seness.tomillis (1), 5); } public Default (длинный период, длинный максимальный, int maxattempts) {this.period = pery; this.maxperiod = maxperiod; this.maxattempts = maxattempts; это. }Файн отменить повторение
@Beanretryer feignretryer () {return retryer.never_retry;}Feign Timeout Timeout Timeout
@Beanrequest.options requestoptions (настраиваемая эндоудмция env) {int ribbonreadtimeout = env.getProperty ("rabbon.readtimeout", int.class, 6000); int RibbonConnectionTimeout = env.getProperty ("лента.connecttimeout", int.class, 3000); вернуть новый запрос.Повторяйте каждого компонента в Spring Cloud
Недавно многие детские обуви спрашивали меня, как настроить компонент Spring Cloud XXX, чтобы попробовать еще раз. Эта статья суммирует это.
Механизм повторения в Spring Cloud довольно хаотичен. Различные версии имеют определенные различия, и реализация не очень отличается. К счастью, Spring Cloud Camden в основном стабилизировался после этого, и в Далстоне были сделаны некоторые улучшения. Детали еще не указаны.
Давайте подробно обсудим это ниже.
Версия, которую я использую, - это Spring Cloud Dalston SR4, которая также подходит для Edgware, а затем. Для предыдущей версии Далстона эта статья не будет обсуждать ее, вы можете изучить ее самостоятельно.
Повторная попытка ленты+Resttemplate
Например, для Resttemplate, который интегрирует ленту, Resttemplate добавляет аннотацию @loadbalanced:
@Bean@loadbalancedpublic resttemplate resttemplate () {simpleclienthttprequestfactory soomblienthttprequestfactory = new SimpleClientHttpRequestFactory (); SimpleClientHttpRequestFactory.SetConnecttimeOut (1000); SimpleClientHttpRequestFactory.SetReadTimeOut (1000); вернуть новый Resttemplate (SimpleClientHttpRequestFactory);}Исходя из этого, повторение может быть достигнуто с помощью следующей конфигурации:
Spring: Cloud: LoadBalancer: Retry: включено: strueribbon: # максимальное количество повторений для одного и того же экземпляра, исключая первый призыв к максиматоретрии: 1 # Максимальное количество повторных для других экзем
Повторная попытка Фейна
Файн также обладает способностью повторить. В ранней весенней облаке Feign использовал feign.Retryer.Default#Default() и попробовал его 5 раз. Но Файн интегрирует ленту, а лента также имеет возможность повторно повторно, что может привести к путанице в поведении в это время.
Spring Cloud осознал эту проблему, поэтому она внесла улучшения, чтобы изменить повторение Фейна на feign.Retryer#NEVER_RETRY . Если вам нужно использовать повторную попытку Фейна, просто используйте конфигурацию повторной фигуры Ribbon. Следовательно, для Camden и более поздних версий повторение Feign можно настроить с помощью следующих свойств:
лента: maxautoretries: 1 maxautoretriesnextserver: 2 ottoretryonalloperations: false
Связанные вопросы можно найти по адресу: https://github.com/spring-cloud/spring-cloud-netflix/issues/467
Повторная попытка Зуула
Конфигурация:
Zuul: # Включите повторяющуюся повторяющуюся Zuul: Trueribbon: Maxautoretries: 1 maxautoretriesnextserver: 2 ottoretryonalporations: false
Выше мы использовали zuul.retryable=true чтобы включить повторную попытку в глобальном масштабе для Zuul. На самом деле, мы также можем включить/выключить указанный маршрут:
zuul.routes. <routename> .retryable = true
Приоритет локальной конфигурации выше.
Повторяет на основе кода ответа http
ClientName: лента: retryablestatuscodes: 404,502
Примечание:
Тайм -аут Hystrix должен быть больше времени, чем время, в противном случае, как только тайм -аут Hystrix невозможно продолжать пытаться снова.
Вообще говоря, не рекомендуется устанавливать ribbon.OkToRetryOnAllOperations . Поскольку после включения этой конфигурации любая операция повторяется, включая запросы POST, и, поскольку тело запроса кэшируется, в настоящее время могут повлиять ресурсы сервера.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.