首页 > 解决方案 > 使用功能区负载均衡器获取所有可访问服务器的列表,无论区域如何

问题描述

我们有 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 个服务器实例参考。

什么可以读取所有服务器列表?

标签: javaspring-bootnetflix-eurekanetflix-zuulnetflix-ribbon

解决方案


终于要达到这个目的了。

我所要做的就是删除线

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

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

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

推荐阅读