/**
* 服务注册中心客户端缓存
*/
public class ClientCachedServiceRegistry {
//服务注册表拉取间隔时间
private static final Long SERVICE_REGISTRY_FETCH_INTERVAL = 30 * 1000L;
//拉取注册表的后台线程
private Daemon daemon;
//客户端缓存注册表
private Map<String, Map<String, ServiceInstance>> registry =
new HashMap<String, Map<String, ServiceInstance>>();
//客户端引用
private RegisterClient registerClient;
//通信组件
private HttpSender httpSender;
public ClientCachedServiceRegistry(RegisterClient registerClient,HttpSender httpSender) {
this.daemon = new Daemon();
this.registerClient = registerClient;
this.httpSender = httpSender;
}
/**
* 启动后台线程
*/
public void initialize() {
daemon.start();
}
/**
* 销毁后台线程
*/
public void destory() {
this.daemon.interrupt();
}
/**
* 负责定时拉取注册表信息
*/
private class Daemon extends Thread {
@Override
public void run() {
//当客户端存活的时候继续循环,没有存活时就不能继续循环了
while (registerClient.isRunning()) {
try {
//通过通信组件获取服务注册表
registry = httpSender.fetchServiceRegistry();
Thread.sleep(SERVICE_REGISTRY_FETCH_INTERVAL);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}