当前位置: 首页 > news >正文

买毕业设计的网站wordpress菜单横排

买毕业设计的网站,wordpress菜单横排,建站平台入口,wordpress 会员支付宝1 Zookeeper分布式案例 1.1 Zookeeper分布式锁原理 核心思想#xff1a;当客户端要获取锁#xff0c;则创建节点#xff0c;使用完锁#xff0c;则删除该节点。 当我们假设根节点/ 下有/locks节点时 1#xff09;客户端获取锁时#xff0c;在locks节点下创建临时顺序…1 Zookeeper分布式案例 1.1 Zookeeper分布式锁原理 核心思想当客户端要获取锁则创建节点使用完锁则删除该节点。 当我们假设根节点/ 下有/locks节点时 1客户端获取锁时在locks节点下创建临时顺序节点。 2然后获取lock下面的所有子节点客户端获取到所有的子节点之后如果发现自己创建的子节点序号最小那么就认为该客户端获取到了锁。即需要小的优先使用完锁后将删除该结点。 3如果发现自己创建的节点并非locks所有子节点中最小的说明自己还没获取到锁此时客户端需要找到比自己小的那个节点同时对其注册事件监听器监听删除事件。 4如果发现比自己小的那个节点被删除则客户端的Watcher会收到相应通知此时再次判断自己创建的节点是否是locks子节点中序号最小的如果是则获取到了锁如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。 1.2 分布式锁案例分析 客户端获取到锁时创建临时顺序节点 create -e -s /locks/seq-接收到请求后在/locks节点下创建一个临时顺序节点判断自己是不是当前节点下最小的节点如果是获取到锁如果不是对前一个节点进行监听获取到锁处理完业务以后delete节点释放锁然后下面的节点将会收到通知重复上述判断 1.2.1 原生Zookeeper实现代码实现 package com.clear.case2;import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat;import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.concurrent.CountDownLatch;/*** 分布式锁案例*/ public class DistributedLock {private final String connectString kk01:2181,kk02:2181,kk01:2181;private final int sessionTimeout 2000;private final ZooKeeper zk;private CountDownLatch countDownLatch new CountDownLatch(1);private CountDownLatch waitLatch new CountDownLatch(1);private String waitPath;private String currentMode;public DistributedLock() throws IOException, InterruptedException, KeeperException {// 获取连接zk new ZooKeeper(connectString, sessionTimeout, new Watcher() {Overridepublic void process(WatchedEvent event) {// countDownLatch 如果连接上zk可以释放if (event.getState() Event.KeeperState.SyncConnected) {countDownLatch.countDown();}// waitLatch 可以释放if (event.getType() Event.EventType.NodeDeleted event.getPath().equals(waitPath)) {waitLatch.countDown();}System.out.println();}});// 等待zk正常连接后再执行后续程序countDownLatch.await();// 判断根节点/locks是否存在Stat stat zk.exists(/locks, false);if (stat null) {// 创建根节点(根节点为持久节点)zk.create(/locks, locks.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}}// 对zk加锁public void zkLock() {// 创建对应的临时带序号的节点try {currentMode zk.create(/locks/ seq-, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);// 判断创建的节点是否是根目录下最小节点如果是获得锁如果不是监听它序号前一个节点ListString children zk.getChildren(/locks, false);// 如果children只有一个值那就直接获取锁如果有多个节点那就需要判断谁最小if (children.size() 1) {return;} else {Collections.sort(children);// 获取节点名称 seq-0000...String thisNode currentMode.substring(/locks/.length());// 通过 seq-0000... 获取其在集合children 中的位置int index children.indexOf(thisNode);// 判断if (index -1) {System.out.println(数据异常);} else if (index 0) {// 就一个节点获取到了锁return;} else {// 监听它前一个节点waitPath /locks/ children.get(index - 1);zk.getData(waitPath, true, null);// 等待监听waitLatch.await();return;}}} catch (KeeperException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}// 对zk解锁public void unZkLock() {// 删除节点try {zk.delete(currentMode, -1);} catch (InterruptedException e) {e.printStackTrace();} catch (KeeperException e) {e.printStackTrace();}} }1.2.2 测试代码 package com.clear.case2;import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat;import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.concurrent.CountDownLatch;/*** 分布式锁案例*/ public class DistributedLockTest {public static void main(String[] args) throws InterruptedException, IOException, KeeperException {final DistributedLock lock1 new DistributedLock();final DistributedLock lock2 new DistributedLock();new Thread(new Runnable() {Overridepublic void run() {try {lock1.zkLock();System.out.println(线程1 启动获取到锁);Thread.sleep(5000);lock1.unZkLock();System.out.println(线程1 释放锁);} catch (InterruptedException e) {e.printStackTrace();}}}).start();new Thread(new Runnable() {Overridepublic void run() {try {lock2.zkLock();System.out.println(线程2 启动获取到锁);Thread.sleep(5000);lock2.unZkLock();System.out.println(线程2 释放锁);} catch (InterruptedException e) {e.printStackTrace();}}}).start();} }启动后结果如下 线程1 启动获取到锁 线程1 释放锁线程2 启动获取到锁 线程2 释放锁两个线程不会同时得到锁此致分布式锁案例完成 1.2.3 Curator 框架实现分布式案例 1原生的 Java API 开发存在的问题 会话连接是异步的需要自己去处理比如使用 CountDownLatchWatch 需要重复注册不然就不能生效开发的复杂性还是比较高的不支持多节点删除和创建。需要自己去递归 2Curator是一个专门解决分布式锁的框架解决了原生Java API 开发分布式遇到的问题 Cutator官方文档 https://curator.apache.org/index.html 1、导入依赖 !-- curator--dependencygroupIdorg.apache.curator/groupIdartifactIdcurator-framework/artifactIdversion4.0.0/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-recipes/artifactIdversion4.0.0/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-client/artifactIdversion4.0.0/version/dependency2、代码实现 package com.clear.case3;import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.locks.InterProcessMutex; import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.log4j.Logger;public class CuratorLockTest {private final static Logger logger Logger.getLogger(CuratorLockTest.class);public static void main(String[] args) {// 创建分布式锁1InterProcessMutex lock1 new InterProcessMutex(getCuratorFramework(), /locks);// 创建分布式锁2InterProcessMutex lock2 new InterProcessMutex(getCuratorFramework(), /locks);new Thread(new Runnable() {Overridepublic void run() {try {lock1.acquire();System.out.println(线程1 获取到锁);lock1.acquire();System.out.println(线程1 再次获取到锁);Thread.sleep(5000);lock1.release();System.out.println(线程1 释放锁);lock1.release();System.out.println(线程1 再次释放锁);} catch (Exception exception) {exception.printStackTrace();}}}).start();new Thread(new Runnable() {Overridepublic void run() {try {lock2.acquire();System.out.println(线程2 获取到锁);lock2.acquire();System.out.println(线程2 再次获取到锁);Thread.sleep(5000);lock2.release();System.out.println(线程2 释放锁);lock2.release();System.out.println(线程2 再次释放锁);} catch (Exception exception) {exception.printStackTrace();}}}).start();}private static CuratorFramework getCuratorFramework() {CuratorFramework client CuratorFrameworkFactory.builder().connectString(kk01:2181,kk02:2181,kk03:2181).connectionTimeoutMs(2000).sessionTimeoutMs(2000).retryPolicy(new ExponentialBackoffRetry(3000, 3)).build();// 启动客户端client.start();logger.info(zookeeper启动成功);return client;} }结果如下 线程2 获取到锁 线程2 再次获取到锁 线程2 释放锁 线程2 再次释放锁 线程1 获取到锁 线程1 再次获取到锁
http://www.zqtcl.cn/news/810035/

相关文章:

  • 网站代码开发方式影视公司网页设计
  • 如何选择网站定制公司响水专业做网站
  • 海门建网站公司凡客模板wordpress
  • 网站关键字排名php开源cms
  • 手机商城手机网站建设多少钱明水县网站建设
  • 北京网站优化外包做板材外贸一般用哪个网站
  • 北京建设网站有哪些公司药店网站模板
  • 网站欢迎页面怎么做个人简历免费模板下载
  • 宁波外贸网站建设竣工验收报告查询网
  • 内衣网站建设详细方案如何制作企业网站的版式
  • 网站建设是否需要源代码php如何制作网站
  • 自响应式网站是什么意思现货交易平台合法的有几家
  • 网站如何做视频链接地址一个虚拟主机空间挂两个网站
  • seo外贸网站建设常州本地网站
  • 可以做机械设计接单的网站pc网站怎么做自适应
  • 网站建设义乌电子商务做网站实训体会
  • 哪些网站做国际贸易比较好徐州泉山建设局网站
  • 平果县免费网站哪家好新媒体营销
  • 网站制作的页面比例企业为什么建立企业网站
  • 网站开发技术的发展专业的seo网站优化公司
  • 十大ppt模板免费下载网站惠州网络营销
  • 网站建设自优化网站首页
  • 网络营销推广方式包括哪几种湘潭网站seo磐石网络
  • 英文WordPress站点切换为中文优化神马网站关键词排名价格
  • 宁波网站建设免费咨询网站建设服务费怎么做会计分录
  • 工作期间员工花钱做的网站wordpress文章内容乱码
  • 艺术设计招聘网站多用户商城网站方案
  • 杭州最大的网站开发有多少专门做兼职的网站
  • 萍乡做网站的公司做偏门网站
  • 成都网站开发价格企业网站管理系统破解版