Ribbon架构解析之IClientConfig配置详解

Ribbon所有的配置均交由IClientConfig统一管理,并提供统一的入口、出口,其它核心组件如IClientILoadBalancer均会读取此配置来控制其行为。

接口定义

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; 
}
上一篇:springcloud-Ribbon的负载均衡和Rest调用


下一篇:Spring Cloud-05-Ribbon