程序员快速提升:精通Zookeeper的经典应用场景
此时在我们分布式锁的构造器中,createPersistent()的参数true是指如果我父目录queueRootNode并没有事先创建完成,这个方法会自动创建出父目录,这样就不怕我们在跑程序之前遗漏掉一些创建文件结构的工作 ![]() ③ 初始化队列信息的init()方法 重新定义好读锁写写锁和任务存放路径,然后把zkClient连接上,创建queueElementNode作为任务元素目录,参数true上文作用已经提到了 ![]() ④ 使用put()方法进行队列元素入队操作 ![]() checkElement()方法是一个简单的参数检查,我们也可以定义有关于znode的命名规范的一些检查,不过一般情况下只要是String类型的参数都是没有问题的 ![]() size()方法也很简单,就是先取得父目录然后调用zkClient自带的countChildren()方法得出结果返回即可 ![]() 主要就是通过subscribeChildChanges()监听子节点的数据变化,在size() < capacity条件成立时,就会唤醒等待队列,而当size() >= capacity,就会判断队列已经被填满,从而进行阻塞 ![]() 在waitForRemove()方法执行后,我们的等待线程被唤醒,这时重新执行put(e),尝试重新入队 入队操作由enqueue(e)来完成,就是创建顺序节点的步骤 ![]() ⑤ 消费操作take ![]() 附:生产者和消费者的模拟 ① 生产者 模拟了两台服务器,两个并发,每睡3秒钟就往消息队列put ![]() ![]() (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |