1. 程式人生 > >Ribbon獲取Eureka註冊中心指定服務的註冊列表

Ribbon獲取Eureka註冊中心指定服務的註冊列表

最近專案需要自定義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";
	}
	

}

即可獲取服務在註冊中心的服務列表。