提问者:小点点

如何刷新/更新@自动更新EurekaClient


几个月前,我开始研究工作的Spring,我正在和Netflix祖尔和Netflix尤里卡一起创建一个架构。

当应用程序部署在Tomcat上时,我无法实现Hystrix Fallback,因此我决定使用EurekaClient和RouteLocator bean。

它们工作得很好,但是当一个应用程序下降并且不再在Eureka服务器上注册时,显然EurekaClient bean不会随着这个下降而更新,所以如果我使用getApplications()方法搜索应用程序,它仍然存在。

如何刷新/更新EurekaClient bean?可能吗?

这是我第一次在堆栈溢出上提问,我仍然不知道如何发布代码,所以我希望我的问题足够了,否则我会尝试以某种方式发布它。

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;
   }

我只添加了代码的主要部分。正如您所看到的,当第一次调用预过滤器时,它使用在eureka服务器上注册的一定数量的服务初始化EurekaClient bean。

如果,在一定的时间后,服务下降,eurekaClient变量不更新,和for循环,当到达检查eurekaClient. getApplication(etc…)==null它返回false,因为变量的服务仍然是。

我该怎么做才能解决这个问题?

我为我的英语提前道歉,这太可怕了。


共1个答案

匿名用户

我认为Spring CloudNetflixHystrix依赖于NetflixRibbon负载均衡器,Ribblon客户端具有用于Eureka Server注册服务的内存缓存。

当请求的服务不可用时,缓存会更新,这将不得不再次调用服务器。

我认为您应该调用服务来更新缓存。