0

我正在使用 Netflix 微服务 API 构建一个培训应用程序。

这是我的优势,从 localhost:9999 开始:

@EnableHystrix
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class EdgeApplication {
    public static void main(String[] args) {
        SpringApplication.run(EdgeApplication.class, args);
    }
}

我定义了以下 2 个应用程序:

app-a公开一个简单的 Web 服务service-a并在 localhost:8081 上启动 公开一个调用app-b的 Web 服务,并在 localhost:8082 上启动service-bservice-a

service-bservice-a使用 Netflix Feign调用:

@FeignClient(value = "app-a", fallback = AppAFallback.class)
public interface AppAClient {
    @RequestMapping(value = "service-a", method = RequestMethod.GET)
    List<Entity> serviceA();
}
@Component
public class AppAFallback implements AppAClient {
    private static final Entity DEFAULT_ENTITY = new Entity();

    @Override
    public List<Entity> serviceA() {
        return Collections.singletonList(DEFAULT_ENTITY);
    }
}

在运行时app-aapp-b每个服务都按预期回答:

如果关闭,AppAFallback则应调用后备。app-b但是,我必须等待大约 1 分钟才能发生。

就在app-b下降之后:

1分钟后app-b下降:

这就是我预期的结果。任何关于为什么调用app-a/service-a之后的任何想法app-b都让我超时?

在此先感谢您的帮助。

4

1 回答 1

0

我遇到过同样的问题,我认为(未经测试)是 Eureka 的更新频率导致了问题。就在 app-b 宕机之后,Eureka 仍然认为 app-b 已经启动(尚未检查心跳)。并且在 app-b 宕机 1 分钟后,Eureka known app-b 宕机,只是告诉你的 app-a 没有 app-b,因此后备立即触发。

于 2016-08-08T11:38:06.683 回答