Я начал пару месяцев назад изучать Spring для работы, и я создаю архитектуру с Netflix Zuul и Netflix Eureka.
Я не смог внедрить Hystrix Fallback при развертывании приложений вTomcat, поэтому я решил использовать компоненты EurekaClient и RouteLocator.
Они работают очень хорошо, но когда приложение падает и больше не регистрируется на сервере Eureka, очевидно, что компонент EurekaClient не обновляется с этим упавшим, так что еслиЯ ищу приложение с помощью метода getApplications (), оно все еще там.
Как я могу обновить / обновить компонент EurekaClient?Является ли это возможным?
Это первый раз, когда я задаю вопрос о переполнении стека, и я до сих пор не знаю, как разместить код, поэтому я надеюсь, что мой вопрос достаточен, иначе я попытаюсь опубликовать его как-нибудь.
public class Prefilter extends ZuulFilter
@Autowired
EurekaClient eurekaClient;
@Autowired
RouteLocator routeLocator;
// some methods of zuul filter
@Override
public Object run() {
RequestContext context = RequestContext.getCurrentContext();
HttpServletRequest request = context.getRequest();
String requestURI = request.getRequestURI();
for(Route route : routeLocator.getRoutes()) {
if(requestURI.contains(route.getFullPath.substring(0, route.getFullPath().lenght() - 2))) {
if(eurekaClient.getApplication(route.getId() == null)) {
return "Service offline, retry later";
}
}
}
return null;
}
Я добавил только основную часть своего кода.Как вы можете видеть, когда предварительный фильтр вызывается в первый раз, он инициализирует компонент EurekaClient с определенным количеством сервисов, зарегистрированных на сервере eureka.
Если по истечении определенного периода времени служба перестает работать, переменная eurekaClient не обновляется, а цикл for, когда прибывает, чтобы проверить, если eurekaClient.getApplication (etc ...) == null, возвращаетfalse, потому что для переменной служба все еще работает.
Как я могу решить эту проблему?
Я заранее извиняюсь за свой английский, это довольно ужасно.