我正在使用 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-b
service-a
service-b
service-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-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(通过边缘)
如果关闭,AppAFallback
则应调用后备。app-b
但是,我必须等待大约 1 分钟才能发生。
就在app-b
下降之后:
- http://localhost:8081/service-a运行良好,调用 fallback
- http://localhost:8082/service-b无法访问
- http://localhost:9999/app-a/service-a TIMEOUT :
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.
1分钟后app-b
下降:
- http://localhost:8081/service-a运行良好,调用 fallback
- http://localhost:8082/service-b无法访问
- http://localhost:9999/app-a/service-a运行良好,调用 fallback
- http://localhost:9999/app-b/service-b GENERAL :负载均衡器没有可用于客户端的服务器:
app-b
这就是我预期的结果。任何关于为什么调用app-a/service-a
之后的任何想法app-b
都让我超时?
在此先感谢您的帮助。