【发布时间】:2016-04-28 16:04:16
【问题描述】:
我正在使用 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 服务 service-b,它调用 service-a,并在 localhost:8082 上启动
service-b 使用 Netflix Feign 调用 service-a:
@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-a 和app-b 正在运行时,每个服务都按预期响应:
- http://localhost:8081/service-a
- http://localhost:8082/service-b
- http://localhost:9999/app-a/service-a(通过边缘)
- http://localhost:9999/app-b/service-b(通过边缘)
如果app-b 关闭,则应调用备用AppAFallback。但是,我必须等待大约 1 分钟才能发生。
就在app-b 关闭之后:
- http://localhost:8081/service-a 运行良好,调用了回退
- http://localhost:8082/service-b 无法访问
-
http://localhost:9999/app-a/service-a 超时:
HystrixRuntimeException: app-a timed-out and no fallback available. -
http://localhost:9999/app-b/service-b 超时:
HystrixRuntimeException: app-b timed-out and no fallback available.
app-b 关闭 1 分钟后:
- http://localhost:8081/service-a 运行良好,调用 fallback
- http://localhost:8082/service-b 无法访问
- http://localhost:9999/app-a/service-a 运行良好,调用了回退
-
http://localhost:9999/app-b/service-b GENERAL:负载均衡器没有可用于客户端的服务器:
app-b
这是我预期的结果。关于为什么在app-b 关闭之后对app-a/service-a 的调用让我超时的任何想法?
提前感谢您的帮助。
【问题讨论】:
标签: spring netflix netflix-eureka netflix-zuul netflix-feign