zoukankan      html  css  js  c++  java
  • zookeeper分布式锁 永久节点问题

    项目用的zk做分布式锁

    @Configuration
    public class ZooKeeperLockConfig {
    
        @Value("${zookeeper.server-lists}")
        String serverList;
    
        @Bean
        public CuratorFramework curatorFramework() {
            CuratorFramework client = CuratorFrameworkFactory.newClient(serverList, new RetryOneTime(100));
            client.start();
            return client;
        }
    
        @Bean
        public LockRegistry zookeeperLockRegistry() {
            return new ZookeeperLockRegistry(curatorFramework());
        }
    
    }
      String key = xxx + orderId;
      Lock lock = lockRegistry.obtain(key);
           try {
                if (lock.tryLock(5, TimeUnit.SECONDS)) {
                   // 业务逻辑
                }
           } catch (Exception e) {
                // 业务逻辑
           } finally {
                lock.unlock();
           }

    CuratorFramework 在创建的时候默认是永久节点,lock.tryLock()创建的是临时节点,类似下图/lock_name1中的永久节点因为业务关系需要加上具体实例id,比如订单号,这样就导致有多少订单就会创建多少个/lock_name1节点,而/lock_name1节点又是永久的,超过zk的最大子节点数就会崩溃,如果要用一方面可以把name1具体实例去掉(根据业务来),另一方面可以在创建CuratorFramework 时候设置成临时节点(没测试成功)

    client.create().withMode(CreateMode.EPHEMERAL).forPath("/Path");

       最终把zk不是锁改成redis,如果业务不涉及到具体实例可以用zk

    不积跬步,无以至千里;不积小流,无以成江海
  • 相关阅读:
    使用express+mongoDB搭建多人博客 学习(6)发表文章
    [译]Understanding ECMAScript6 对象
    select的type属性
    jQuery addClass() 源码解读
    jQuery val()方法及valHooks源码解读
    mpvue使用scroll-view实现图片横向滑动
    mpvue图片轮播遇到的问题
    mpvue小程序图片404
    js截取字符串的后几位数
    jQuery WeUI实现分页功能
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15396913.html
Copyright © 2011-2022 走看看