• 6、zookeeper应用场景-分布式唯一ID


    分布式唯一id案例

      原理:使用zookeeper有序节点,节点后会加上有序的id,用这个id来当唯一ID

      在过去的单库单表型系统中,通常第可以使用数据库字段自带的auto_ increment属性来自动为每条记录生成个唯一的ID

    但是分库分表后,就无法在依靠数据库的auto_ increment属性来唯一标识一条记录了。此时我们就可以用zookeeper在分布式环境下生成全局唯一ID

     

    案例:

    public class IdGenerate {
    
        private static final String IP = "192.168.133.133:2181";
        private static CountDownLatch countDownLatch = new CountDownLatch(1);
        private static ZooKeeper zooKeeper;
    
        public static String generateId() throws Exception {
            return zooKeeper.create("/id", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
        }
    
    
        public static void main(String[] args) throws Exception {
            zooKeeper = new ZooKeeper(IP, 5000, new ZKWatcher());
            countDownLatch.await();
            ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 5, 0, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10));
            for (int i = 0; i < 10; i++) {
                threadPoolExecutor.execute(() -> {
                    try {
                        System.out.println(generateId());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
            }
            TimeUnit.SECONDS.sleep(50);
            threadPoolExecutor.shutdown();
        }
    
        static class ZKWatcher implements Watcher {
            @Override
            public void process(WatchedEvent watchedEvent) {
                countDownLatch.countDown();
                System.out.println("zk的监听器" + watchedEvent.getType());
            }
        }
    }
  • 相关阅读:
    服务器&域名那些事儿
    原生js实现简单打字机效果
    Mac OS X 11以上系统的Rootless机制问题
    用hexo书写github.io博客 学习心得 教程
    冒泡排序
    选择排序
    TCP三次握手和四次挥手
    常见HTTP状态码
    JSONP
    前端缓存(cookies、localStorage、sessionStorage)
  • 原文地址:https://www.cnblogs.com/lemon-flm/p/14605376.html
Copyright © 2020-2023  润新知