最简单的入门方法是使用属性驱动的工厂用负载均衡器创建客户机实例。示例应用程序在rip -httpclient中显示了基本用法,并描述如下:
The properties file (sample-client.properties)
# 同一服务器上重试的最大次数(不包括第一次重试)
sample-client.ribbon.MaxAutoRetries=1
# 重试的下一个服务器的最大数量(不包括第一个服务器)
sample-client.ribbon.MaxAutoRetriesNextServer=1
# 是否可以为该客户端重试所有操作
sample-client.ribbon.OkToRetryOnAllOperations=true
# 间隔多长时间从源刷新服务器列表
sample-client.ribbon.ServerListRefreshInterval=2000
# Apache HttpClient使用的连接超时
sample-client.ribbon.ConnectTimeout=3000
# Apache HttpClient使用的读取超时
sample-client.ribbon.ReadTimeout=3000
# 初始服务器列表,可以在运行时通过Archaius动态属性更改
sample-client.ribbon.listOfServers=www.microsoft.com:80,www.yahoo.com:80,www.google.com:80
条目的格式是:
<clientName>.<nameSpace>.<propertyName>=<value>
客户机名称稍后将在工厂中用于创建客户机。名称空间是可配置的,默认情况下是“ribbon”。公共属性名在CommonClientConfigKey中可用。
属性也可以定义为系统属性,或者在Archaius加载的任何属性源中。
The code
public static void main(String[] args) throws Exception { ConfigurationManager.loadPropertiesFromResources("sample-client.properties"); // 1 System.out.println(ConfigurationManager.getConfigInstance().getProperty("sample-client.ribbon.listOfServers")); RestClient client = (RestClient) ClientFactory.getNamedClient("sample-client"); // 2 HttpClientRequest request = HttpClientRequest.newBuilder().setUri(new URI("/")).build(); // 3 for (int i = 0; i < 20; i++) { HttpClientResponse response = client.executeWithLoadBalancer(request); // 4 System.out.println("Status code for " + response.getRequestedURI() + " :" + response.getStatus()); } ZoneAwareLoadBalancer lb = (ZoneAwareLoadBalancer) client.getLoadBalancer(); System.out.println(lb.getLoadBalancerStats()); ConfigurationManager.getConfigInstance().setProperty( "sample-client.ribbon.listOfServers", "www.linkedin.com:80,www.google.com:80"); // 5 System.out.println("changing servers ..."); Thread.sleep(3000); // 6 for (int i = 0; i < 20; i++) { HttpClientResponse response = client.executeWithLoadBalancer(request); System.out.println("Status code for " + response.getRequestedURI() + " : " + response.getStatus()); response.releaseResources(); } System.out.println(lb.getLoadBalancerStats()); // 7 }
注意:
- 使用Archaius ConfigurationManager加载属性文件。
- 使用ClientFactory创建客户机和负载均衡器。
- 使用构建器构建http请求。注意,我们只提供URI的路径部分(“/”)。一旦服务器被负载均衡器选择,客户机将计算完整的URI。
- 调用client.executeWithLoadBalancer() API,而不是execute() API。
- 从配置动态更改服务器池。
- 等待服务器列表刷新(属性文件中定义的2秒refersh间隔)
- 打印由负载均衡器记录的服务器统计数据。
负载均衡器统计数据包含大量用于监视的信息,并被用作负载均衡器算法的输入。下面是一个输出的例子:
Zone stats: {unknown=[Zone:unknown; Instance count:2; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
},Server stats: [[Server:www.microsoft.com:80; Zone:UNKNOWN; Total Requests:6; Successive connection failure:0; Total blackout seconds:0; Last connection made:Fri Jan 25 14:52:18 PST 2013; First connection made: Fri Jan 25 14:52:15 PST 2013; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:129.83333333333334; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:33.0; max resp time:530.0; stddev resp time:179.30180949697325]
, [Server:www.google.com:80; Zone:UNKNOWN; Total Requests:17; Successive connection failure:0; Total blackout seconds:0; Last connection made:Fri Jan 25 14:52:23 PST 2013; First connection made: Fri Jan 25 14:52:14 PST 2013; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:67.6470588235294; 90 percentile resp time:50.0; 95 percentile resp time:50.0; min resp time:45.0; max resp time:384.0; stddev resp time:79.12234842799629]
, [Server:www.yahoo.com:80; Zone:UNKNOWN; Total Requests:7; Successive connection failure:0; Total blackout seconds:0; Last connection made:Fri Jan 25 14:52:18 PST 2013; First connection made: Fri Jan 25 14:52:13 PST 2013; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:561.1428571428571; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:445.0; max resp time:879.0; stddev resp time:132.42618274930024]
, [Server:www.linkedin.com:80; Zone:UNKNOWN; Total Requests:10; Successive connection failure:0; Total blackout seconds:0; Last connection made:Fri Jan 25 14:52:23 PST 2013; First connection made: Fri Jan 25 14:52:22 PST 2013; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:94.6; 90 percentile resp time:404.0; 95 percentile resp time:404.0; min resp time:53.0; max resp time:404.0; stddev resp time:103.25037530198135]
]