1. /**
    2. * 服务注册中心客户端缓存
    3. */
    4. public class ClientCachedServiceRegistry {
    5. //服务注册表拉取间隔时间
    6. private static final Long SERVICE_REGISTRY_FETCH_INTERVAL = 30 * 1000L;
    7. //拉取注册表的后台线程
    8. private Daemon daemon;
    9. //客户端缓存注册表
    10. private Map<String, Map<String, ServiceInstance>> registry =
    11. new HashMap<String, Map<String, ServiceInstance>>();
    12. //客户端引用
    13. private RegisterClient registerClient;
    14. //通信组件
    15. private HttpSender httpSender;
    16. public ClientCachedServiceRegistry(RegisterClient registerClient,HttpSender httpSender) {
    17. this.daemon = new Daemon();
    18. this.registerClient = registerClient;
    19. this.httpSender = httpSender;
    20. }
    21. /**
    22. * 启动后台线程
    23. */
    24. public void initialize() {
    25. daemon.start();
    26. }
    27. /**
    28. * 销毁后台线程
    29. */
    30. public void destory() {
    31. this.daemon.interrupt();
    32. }
    33. /**
    34. * 负责定时拉取注册表信息
    35. */
    36. private class Daemon extends Thread {
    37. @Override
    38. public void run() {
    39. //当客户端存活的时候继续循环,没有存活时就不能继续循环了
    40. while (registerClient.isRunning()) {
    41. try {
    42. //通过通信组件获取服务注册表
    43. registry = httpSender.fetchServiceRegistry();
    44. Thread.sleep(SERVICE_REGISTRY_FETCH_INTERVAL);
    45. } catch (InterruptedException e) {
    46. e.printStackTrace();
    47. }
    48. }
    49. }
    50. }
    51. }