美文网首页
使用zk实现超mini注册中心

使用zk实现超mini注册中心

作者: StephenRo | 来源:发表于2018-08-08 18:58 被阅读32次
    <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

    相关文章

      网友评论

          本文标题:使用zk实现超mini注册中心

          本文链接:https://www.haomeiwen.com/subject/pxnxbftx.html