一、簡介
字如其名,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,並存儲結果,最後一併返回。