一、简介
字如其名,ribbon采用IPing接口来探测server是否存活。
二、接口
接口很简单,代码如下:
public interface IPing {
public boolean isAlive(Server server);
}
IPing有好多实现(但是大部分都没啥用),如下:
三、深入
这里如果使用eureka的话,其默认的实现为NIWSDiscoveryPing(可以从spring-cloud-netflix-eureka-client/META-INF/spring.factories中查找RibbonEurekaAutoConfiguration)
其实现也很简单,直接强转server为DiscoveryEnabledServer,获取其status,看看字段是否为UP。
另外,PingUrl,其使用发送http请求的方式来判断是否ping通。
四、辅助接口
通过IPing可以了解到,它的作用是ping某个server是否存活。那么对于服务列表如何检测呢?ribbon定义的接口为IPingStrategy:
public interface IPingStrategy {
boolean[] pingServers(IPing ping, Server[] servers);
}
其实现很简单,就是轮询委托给IPing来ping,并存储结果,最后一并返回。