使用zk实现超mini注册中心

<dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.4.0</version>
</dependency>
<dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.4.0</version>
</dependency>

使用 Server 改变url发送2次创建临时节点:

public class Server {
    public static void main(String[] args) {
        // 1 重试策略:初试时间为1s 重试10次
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 10);
        // 2 通过工厂创建连接
        CuratorFramework cf = CuratorFrameworkFactory.builder()
                .connectString("localhost:2181")
                .sessionTimeoutMs(1000 * 10)
                .retryPolicy(retryPolicy)
                .build();
        // 3 开启连接
        cf.start();
        try {
            // 4. 模拟本机ip
            cf.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/urls/192.168.0.11");
            Thread.sleep(200000000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

启动 Client

public class Client {
    public static void main(String[] args) {
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 10);
        CuratorFramework cf = CuratorFrameworkFactory.builder()
                .connectString("localhost:2181")
                .sessionTimeoutMs(1000 * 10)
                .retryPolicy(retryPolicy)
                .build();
        cf.start();

        try {
            final PathChildrenCache childrenCache = new PathChildrenCache(cf, "/urls", true);
            childrenCache.start(PathChildrenCache.StartMode.POST_INITIALIZED_EVENT);
            childrenCache.getListenable().addListener(
                    (client, event) -> {
                        switch (event.getType()) {
                            case CHILD_ADDED:
                                System.out.println("CHILD_ADDED: " + event.getData().getPath());
                                break;
                            case CHILD_REMOVED:
                                System.out.println("CHILD_REMOVED: " + event.getData().getPath());
                                break;
                            case CHILD_UPDATED:
                                System.out.println("CHILD_UPDATED: " + event.getData().getPath());
                                break;
                            default:
                                break;
                        }
                    }
            );
            List<String> urls = cf.getChildren().forPath("/urls");
            for (String url : urls) {
                System.out.println(url);
            }
            Thread.sleep(200000000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行图:


image.png

下掉一个节点之后:


image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,365评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,241评论 2 89
  • 大概真的只有夜晚安静地看书才能感受到没有城市喧嚣的世界是怎样的 并沉溺其中。 我很喜欢用大概也许可能或许这类词来描...
    nidehuoji阅读 299评论 0 0
  • 1. 什么是哈希表 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问...
    FantJ阅读 672评论 1 5
  • VK影音 忆经典 赏大片 领略西方文化 ...
    VK_小V阅读 979评论 0 1

友情链接更多精彩内容