package sandbox.ribbon; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import com.netflix.client.ClientFactory; import com.netflix.client.http.HttpRequest; import com.netflix.client.http.HttpResponse; import com.netflix.config.ConfigurationManager; import com.netflix.loadbalancer.ZoneAwareLoadBalancer; import com.netflix.niws.client.http.RestClient; public class RibbonMain { public static void main(String[] args) throws Exception { read_and_print_initial_servers_from_properties_file(); RestClient client = (RestClient) ClientFactory.getNamedClient("sample-client"); // 2 do_20_requests_and_print_status_codes(client); printLoadBalanceStatsFor(client); change_servers(); do_20_requests_and_print_status_codes(client); printLoadBalanceStatsFor(client); } private static void read_and_print_initial_servers_from_properties_file() throws IOException { ConfigurationManager.loadPropertiesFromResources("ribbon/sample-client.properties"); // 1 System.out.println(ConfigurationManager.getConfigInstance().getProperty("sample-client.ribbon.listOfServers")); } private static void do_20_requests_and_print_status_codes(RestClient client) throws URISyntaxException, com.netflix.client.ClientException { HttpRequest request = HttpRequest.newBuilder() .uri(new URI("/")) .verb(HttpRequest.Verb.GET) .build(); for (int i = 0; i < 20; i++) { HttpResponse response = client.executeWithLoadBalancer(request); System.out.println("Status code for " + response.getRequestedURI() + " : " + response.getStatus()); response.close(); } } private static void printLoadBalanceStatsFor(RestClient client) { ZoneAwareLoadBalancer lb = (ZoneAwareLoadBalancer) client.getLoadBalancer(); System.out.println(lb.getLoadBalancerStats()); // 7 } private static void change_servers() throws InterruptedException { ConfigurationManager.getConfigInstance().setProperty("sample-client.ribbon.listOfServers", "www.linkedin.com:80,www.google.com:80"); // 5 System.out.println("changing servers ..."); Thread.sleep(3000); } }