客户端配置选项
配置客户端和负载均衡器最简单的方法是将符合特定格式的属性加载到Archaius中:
<clientName>.<nameSpace>.<propertyName>=<value>
您可以在类路径上的文件中定义属性,也可以将其定义为系统属性。如果是前者,应该调用ConfigurationManager.loadPropertiesFromResources() API来加载文件。
默认情况下,“ribbon”应该是命名空间。
如果没有为指定的客户端指定属性,ClientFactory仍然会创建客户端并为所有必需的属性使用默认值加载均衡器。默认值在DefaultClientConfigImpl中指定。
如果属性缺少clientName,则将其解释为适用于所有客户机的属性。
例如:
ribbon.ReadTimeout=1000
这将为所有客户机建立默认的ReadTimeout属性。
您还可以通过构造DefaultClientConfigImpl实例以编程方式设置属性。遵循以下步骤:
- 调用 DefaultClientConfigImpl.getClientConfigWithDefaultValues(String clientName)来加载默认值,以及在Archaius中已经用配置定义的所有属性
- 通过调用DefaultClientConfigImpl.setProperty() API设置所有需要的属性。
- 将这个实例连同客户机名称一起传递给适当的ClientFactory API。
如果需要在不同的名称空间中定义属性,例如“foo”
myclient.foo.ReadTimeout=1000
您应该在上面的第一步中使用getClientConfigWithDefaultValues(String clientName, String nameSpace)构造函数——在本例中是getClientConfigWithDefaultValues(“myclient”,“foo”)。
在ClientFactory中使用非默认属性名称空间
如果您想使用属性名空间而不是“ribbon”,并使用ClientFactory api来创建客户机或负载均衡器,有几种方法:
选项1:
扩展DefaultClientConfigImpl并覆盖方法getNameSpace(),例如,
public class MyClientConfig extends DefaultClientConfigImpl { // ... public String getNameSpace() { return "foo"; } }
假设所有属性都定义为myclient.foo.*,您可以使用以下ClientFactory API创建客户端:
MyClient client = (MyClient) ClientFactory.createNamedClient("myclient", MyClientConfig.class);
选项2:
使用DefaultClientConfigImpl,但将其名称空间从默认值更改。例如,我们有客户端
名称“myclient”及其属性在名称空间“foo”中定义:
DefaultClientConfigImpl clientConfig = new DefaultClientConfigImpl("foo"); clientConfig.loadProperites("myclient"); MyClient client = (MyClient) ClientFactory.registerClientFromProperties("myclient", clientConfig);
使用负载均衡器支持实现您自己的客户端
您需要扩展com.netflix.client.AbstractLoadBalancerAwareClient并实现一些方法。具体来说,应该实现IClient.execute()方法来执行特定于协议的操作。
AbstractLoadBalancerAwareClient负责负载均衡器集成、重试逻辑和统计信息的收集,这些统计信息用作负载均衡器算法和监视的输入。
客户端应用程序需要为其配置定义此属性:
<clientName>.<nameSpace>.ClientClassName=<Your implementation class name>
然后客户端应用程序可以通过使用ClientFactory提供的适当api来获得客户端实例
与Eureka的集成
Eureka提供了服务发现功能,可以与ribbon集成以提供服务器的动态列表。要使用Eureka与ribbon,请遵循以下步骤:
- 在你的依赖中包括ribbon-eureka
- (默认情况下)为客户端启用负载均衡器,并将负载均衡器配置为DynamicServerListLoadBalancer或其子类。这在默认情况下是正确的。
- 将服务器列表配置为com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList
- 配置服务器刷新速率。(可选,默认为30秒)
- 为客户端配置服务器的虚拟地址(“Vip地址”),并确保它与用于注册Eureka服务器的服务器的“Vip地址”匹配。
这里有一个例子:
myclient.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList
# refresh every minute
myclient.ribbon.ServerListRefreshInterval=60000
# movieservice是目标服务器用于向Eureka服务器注册的虚拟地址
myclient.ribbon.DeploymentContextBasedVipAddresses=movieservice
此外,您需要为Eureka客户端提供适当的配置文件。在这里Eureka WIKI看到的。