Ribbon獲取Eureka註冊中心指定服務的註冊列表
阿新 • • 發佈:2018-11-21
最近專案需要自定義Ribbon路由規則。需要獲取 服務在 註冊中心的註冊列表
一種是繼承 AbstractLoadBalancerRule 類 實現自定義規則類。其中可以得到LoadBalancer負載均衡器,從而得到服務列表
public class MyRule extends AbstractLoadBalancerRule{ private static final Logger LOGGER = LoggerFactory.getLogger(MyRule.class); public Server choose( Object arg0) { ILoadBalancer lb = this.getLoadBalancer(); List<Server> upServerList = lb.getReachableServers(); //可用服務列表 List<Server> allServerList = lb.getAllServers(); return null; } @Override public void initWithNiwsConfig(IClientConfig arg0) { // TODO Auto-generated method stub } }
在配置檔案中指定某一服務
SERVICE-HI.ribbon.NFLoadBalancerRuleClassName=com.test.eurekaRibbon.rule.MyRule
二是直接獲取LoadBalancer,可使用Ribbon中的Bean工廠獲取
@RestController public class HelloController { @Autowired private SpringClientFactory factory; @RequestMapping("/testBalancer") public String testBalancer() { ILoadBalancer lb = factory.getLoadBalancer("SERVICE-HI"); //指定服務名 List<Server> allServers = lb.getAllServers(); List<Server> upServers = lb.getReachableServers(); return "hello"; } }
即可獲取服務在註冊中心的服務列表。