使用功能区负载平衡器获取所有可访问服务器的列表,无论区域是什么

时间:2019-11-16 09:23:25

标签: java spring-boot netflix-eureka netflix-zuul netflix-ribbon

我们有4个区域,每个区域都运行着zuul和UI服务。 Ribbon是我们跨服务的负载平衡器。

我们正在

中使用自定义负载平衡规则在Zuul中实现粘性会话

https://github.com/alejandro-du/vaadin-microservices-demo/blob/master/proxy-server/src/main/java/com/example/StickySessionRule.java

如您在上面的文件中看到的,有一行获取特定服务可访问服务器的列表

List<Server> servers = getLoadBalancer().getReachableServers();

由于启用了区域亲和性,服务器列表中将只有一台服务器。

有没有办法获得所有可用服务器而不考虑区域?

我们正在寻找可以代替上述负载平衡器调用的东西。

在当前的粘性会话规则中,我们使用ZoneAvoidanceRule。我们还尝试了AvailabilityFilteringRule,BaseLoadBalancer和RoundRobinRule。但是它们都没有给出所有4个服务器实例的引用。

如何读取所有服务器列表?

1 个答案:

答案 0 :(得分:0)

最后将要实现这一目标。

我要做的就是删除行

List<Server> servers = getLoadBalancer().getReachableServers();

然后注入具有所有应用程序实例信息的EurekaClient bean,然后将服务器列表读取为

Application app = eurekaClient.getApplication("application-name");
List<InstanceInfo> allinstances = app.getInstances();