Как обновить / обновить @Autowired EurekaClient - PullRequest
1 голос
/ 16 марта 2019

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

Как я могу решить эту проблему?

Я заранее извиняюсь за свой английский, это довольно ужасно.

1 Ответ

0 голосов
/ 17 марта 2019

Я думаю, что Spring Cloud Netflix Hystrix зависит от Netflix Ribbon балансировщик нагрузки и Ribblon клиент имеет в памяти кеш для зарегистрированных сервисов с Eureka Server.

Кэш обновляется, когда запрошенная служба недоступна, и ему придется снова вызывать сервер.

Я думаю, вам следует вызвать службу для обновления кэша.

...