/** * 服务注册中心客户端缓存 */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(); } } } }}