我正在使用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
公开了一个名为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
正在运行时,每个服务都会按预期回答:
如果AppAFallback
关闭,则应调用后备app-b
。但是我必须在它发生之前等待大约1分钟。
在app-b
关闭之后:
HystrixRuntimeException: app-a timed-out and no fallback available.
HystrixRuntimeException: app-b timed-out and no fallback available.
app-b
关闭后1分钟:
app-b
这是我预期的结果。关于为什么在app-a/service-a
之后拨打app-b
的请求失败的任何想法都给了我TIMEOUT?
提前感谢您的帮助。
答案 0 :(得分:0)
我遇到了同样的问题,我认为(未经测试),这是Eureka的更新频率导致的问题。在app-b关闭之后,Eureka仍然认为app-b已启动(尚未检查心跳)。在app-b关闭1分钟后,Eureka知道app-b已经关闭,只是告诉你的应用程序 - 没有app-b,因此立即启动后备。