Ribbon所有的配置均交由IClientConfig
统一管理,并提供统一的入口、出口,其它核心组件如IClient
、ILoadBalancer
均会读取此配置来控制其行为。
接口定义
public interface IClientConfig {
// 如account、user...
public String getClientName();
// 默认值是ribbon
public String getNameSpace();
// 加载给定客户端/负载均衡器(名为clinetName)的属性。该方法重要,重要,重要
// 内部会自动加载默认是,也就是loadDefaultValues()方法
public void loadProperties(String clientName);
// 加载配置的默认值们,放进全局的Configuration里面。和clientName无关,公用的
public void loadDefaultValues();
@Deprecated
public void setProperty(IClientConfigKey key, Object value);
@Deprecated
public Object getProperty(IClientConfigKey key);
@Deprecated
public Object getProperty(IClientConfigKey key, Object defaultVal);
// 请用这三个带有泛型的方法,代替上面的三个方法 不用强转更安全
// 入参是IClientConfigKey,这在上文已经详解过
public <T> IClientConfig set(IClientConfigKey<T> key, T value);
public <T> T get(IClientConfigKey<T> key);
public <T> T get(IClientConfigKey<T> key, T defaultValue);
... // 省略getPropertyAsInteger getPropertyAsString getPropertyAsBoolean方法
// 配置内是否包含某个key
public boolean containsProperty(IClientConfigKey key);
//返回此Client客户端配置使用的适用虚拟地址(“vip”)。
//会依赖于VipAddressResolver进行解析
public String resolveDeploymentContextbasedVipAddresses();
}
该接口有唯一实现类DefaultClientConfigImpl
,它管理着常用属性key对应的默认值,以及实现所有的接口方法。
public class DefaultClientConfigImpl implements IClientConfig {
// ===================默认值们==================
public static final Boolean DEFAULT_PRIORITIZE_VIP_ADDRESS_BASED_SERVERS = Boolean.TRUE;
public static final String DEFAULT_NFLOADBALANCER_PING_CLASSNAME = "com.netflix.loadbalancer.DummyPing";
// 默认在单台Server上不会重试
public static final int DEFAULT_MAX_AUTO_RETRIES = 0;
// 默认这台不行,只会重试下一台(若你有多台机器,其它的就不会被尝试到了)
public static final int DEFAULT_MAX_AUTO_RETRIES_NEXT_SERVER = 1;
public static final int DEFAULT_READ_TIMEOUT = 5000;
public static final int DEFAULT_CONNECT_TIMEOUT = 2000;
...
// 默认的nameSpace值
public static final String DEFAULT_PROPERTY_NAME_SPACE = "ribbon";
// all connections idle for 30 secs
public static final int DEFAULT_CONNECTIONIDLE_TIME_IN_MSECS = 30000;
}