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

    不积跬步,无以至千里;不积小流,无以成江海
  • 相关阅读:
    SqlDataReader 和SqlDataAdapter 区别
    【面筋烧烤手册】20210301
    【CSS】组件中怎么对css进行处理的
    【CSS】实现五点布局
    【面筋烧烤手册】20200228
    【JavaScript】Class类
    【面筋烧烤手册】CSS
    【面筋烧烤手册】函数柯里化延伸的知识点
    【PlantAPP】TS在RN的具体应用
    【面筋烧烤手册】网络安全
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15396913.html
Copyright © 2011-2022 走看看