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

    不积跬步,无以至千里;不积小流,无以成江海
  • 相关阅读:
    Running APP 使用说明
    Android 控件八 WebView 控件
    Android 控件七 ImageView 控件
    Android 控件六 CheckBox 控件
    Android 控件五 RadioButton 控件
    Android 控件四 EditText 控件
    Android 控件三 TextView 控件实现 Button
    Android 控件二 Button
    Android 基础控件演示实例
    Android 控件一 TextView
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15396913.html
Copyright © 2011-2022 走看看