netflix ribbon 之 IPing
1.指定IPing实现
spring-cloud-order-service.ribbon.NFLoadBalancerPingClassName=\
com.honeycat.springcloud.ribbon.loadBalancer.MyPing
2.IPing实现
public class MyPing implements IPing {
@Override
public boolean isAlive(Server server) {
if(server == null) return false;
boolean alive = server.isAlive();
if(!alive) {
notifyingForServerDown(server, "from param checking");
return alive;
}
try {
Socket socket = new Socket(server.getHost(), server.getPort());
alive = socket.isBound();
if(!alive){
notifyingForServerDown(server, "from socket checking");
}
socket.close();
return alive;
} catch (IOException e) {
notifyingForServerDown(server, "from socket exception");
return false;
}
}
private void notifyingForServerDown(Server server, String mark) {
System.out.println("\n=== [Warning!]" + mark + " ===>serverIP:" + server.getHostPort() +
",schema:" +
server.getScheme() +
",metadata:" +
server.getMetaInfo() +
",zone:" +
server.getZone() +
",Alive:" +
false
);
}
}