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

网页ui设计培训seo是什么意思 为什么要做seo

网页ui设计培训,seo是什么意思 为什么要做seo,旅游类网站开发毕业设计,api模式网站开发介绍ZooKeeper提供了多种功能,包括分布式锁、配置管理、服务发现、领导选举等。 下面是一些常见的ZooKeeper功能及其在Java中的应用示例代码。 分布式锁 import org.apache.zookeeper.*; import java.io.IOException; import java.util.concurrent.CountDownLatch;pu…

ZooKeeper提供了多种功能,包括分布式锁、配置管理、服务发现、领导选举等。

下面是一些常见的ZooKeeper功能及其在Java中的应用示例代码。

分布式锁

import org.apache.zookeeper.*;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;public class DistributedLock implements Watcher {private static final String ZOOKEEPER_ADDRESS = "localhost:2181";private static final int SESSION_TIMEOUT = 5000;private static final String LOCK_PATH = "/distributed-lock";private ZooKeeper zooKeeper;private String currentLockPath;private CountDownLatch lockSignal;public DistributedLock() throws IOException, InterruptedException, KeeperException {// 创建ZooKeeper对象,建立与ZooKeeper服务器的连接zooKeeper = new ZooKeeper(ZOOKEEPER_ADDRESS, SESSION_TIMEOUT, this);lockSignal = new CountDownLatch(1);// 确保锁的根节点存在ensurePathExists(LOCK_PATH);}public void lock() throws KeeperException, InterruptedException {// 创建临时顺序节点作为锁节点String lockNodePath = zooKeeper.create(LOCK_PATH + "/lock-", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);while (true) {// 获取锁节点下的所有子节点List<String> children = zooKeeper.getChildren(LOCK_PATH, false);Collections.sort(children);// 获取当前锁节点在所有子节点中的位置int index = children.indexOf(lockNodePath.substring(LOCK_PATH.length() + 1));if (index == 0) {// 如果当前锁节点是第一个节点,则获取到了锁this.currentLockPath = lockNodePath;return;} else {// 如果当前锁节点不是第一个节点,则监听前一个节点的删除事件,然后等待String previousLockPath = LOCK_PATH + "/" + children.get(index - 1);zooKeeper.exists(previousLockPath, true);lockSignal.await();}}}public void unlock() throws KeeperException, InterruptedException {// 删除当前锁节点zooKeeper.delete(currentLockPath, -1);currentLockPath = null;}private void ensurePathExists(String path) throws KeeperException, InterruptedException {// 确保路径存在,如果不存在则创建持久节点if (zooKeeper.exists(path, false) == null) {zooKeeper.create(path, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}}@Overridepublic void process(WatchedEvent watchedEvent) {if (watchedEvent.getType() == Event.EventType.NodeDeleted && watchedEvent.getPath().equals(currentLockPath)) {// 当前锁节点被删除时,唤醒等待线程lockSignal.countDown();}}
}

配置管理

import org.apache.zookeeper.*;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;public class ConfigManager implements Watcher {private static final String ZOOKEEPER_ADDRESS = "localhost:2181";private static final int SESSION_TIMEOUT = 5000;private static final String CONFIG_PATH = "/config";private ZooKeeper zooKeeper;private CountDownLatch configSignal;private String currentConfig;public ConfigManager() throws IOException, InterruptedException, KeeperException {// 创建ZooKeeper对象,建立与ZooKeeper服务器的连接zooKeeper = new ZooKeeper(ZOOKEEPER_ADDRESS, SESSION_TIMEOUT, this);configSignal = new CountDownLatch(1);// 确保配置节点存在ensurePathExists(CONFIG_PATH);}public String getConfig() throws KeeperException, InterruptedException {// 获取配置节点的数据,并等待配置更新byte[] data = zooKeeper.getData(CONFIG_PATH, true, null);configSignal.await();return new String(data);}private void ensurePathExists(String path) throws KeeperException, InterruptedException {// 确保路径存在,如果不存在则创建持久节点if (zooKeeper.exists(path, false) == null) {zooKeeper.create(path, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}}@Overridepublic void process(WatchedEvent watchedEvent) {if (watchedEvent.getType() == Event.EventType.NodeDataChanged && watchedEvent.getPath().equals(CONFIG_PATH)) {try {// 当配置节点数据发生变化时,获取最新的配置数据,并唤醒等待线程byte[] data = zooKeeper.getData(CONFIG_PATH, true, null);currentConfig = new String(data);configSignal.countDown();} catch (KeeperException | InterruptedException e) {e.printStackTrace();}}}
}

服务发现

import org.apache.zookeeper.*;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;public class ServiceDiscovery implements Watcher {private static final String ZOOKEEPER_ADDRESS = "localhost:2181";private static final int SESSION_TIMEOUT = 5000;private static final String SERVICE_PATH = "/services";private ZooKeeper zooKeeper;private CountDownLatch serviceSignal;private List<String> currentServices;public ServiceDiscovery() throws IOException, InterruptedException, KeeperException {// 创建ZooKeeper对象,建立与ZooKeeper服务器的连接zooKeeper = new ZooKeeper(ZOOKEEPER_ADDRESS, SESSION_TIMEOUT, this);serviceSignal = new CountDownLatch(1);// 确保服务节点存在ensurePathExists(SERVICE_PATH);}public List<String> getServices() throws KeeperException, InterruptedException {// 获取服务节点的子节点列表,并等待服务更新List<String> children = zooKeeper.getChildren(SERVICE_PATH, true);serviceSignal.await();return currentServices;}private void ensurePathExists(String path) throws KeeperException, InterruptedException {// 确保路径存在,如果不存在则创建持久节点if (zooKeeper.exists(path, false) == null) {zooKeeper.create(path, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}}@Overridepublic void process(WatchedEvent watchedEvent) {if (watchedEvent.getType() == Event.EventType.NodeChildrenChanged && watchedEvent.getPath().equals(SERVICE_PATH)) {try {// 当服务节点的子节点发生变化时,获取最新的服务列表,并唤醒等待线程List<String> children = zooKeeper.getChildren(SERVICE_PATH, true);currentServices = children;serviceSignal.countDown();} catch (KeeperException | InterruptedException e) {e.printStackTrace();}}}
}

以上是对示例代码的详细注释,希望能够帮助您理解代码的功能和使用方式。


文章转载自:
http://dinncocacoethes.bpmz.cn
http://dinncotelescript.bpmz.cn
http://dinncowhiteness.bpmz.cn
http://dinncooctuple.bpmz.cn
http://dinncoshillaber.bpmz.cn
http://dinncofibrocystic.bpmz.cn
http://dinncocircumambiency.bpmz.cn
http://dinncoimmit.bpmz.cn
http://dinncomutilate.bpmz.cn
http://dinncofolkway.bpmz.cn
http://dinncounadulterated.bpmz.cn
http://dinncoexcitomotor.bpmz.cn
http://dinncofetterbush.bpmz.cn
http://dinncoshorten.bpmz.cn
http://dinncohammerless.bpmz.cn
http://dinncostair.bpmz.cn
http://dinncohyla.bpmz.cn
http://dinncotonsillotomy.bpmz.cn
http://dinncoparroquet.bpmz.cn
http://dinncovitruvian.bpmz.cn
http://dinncozeaxanthin.bpmz.cn
http://dinncoguiro.bpmz.cn
http://dinncopipeage.bpmz.cn
http://dinncoprotanope.bpmz.cn
http://dinncosorrowful.bpmz.cn
http://dinncosilvics.bpmz.cn
http://dinncoconnie.bpmz.cn
http://dinncopinealectomy.bpmz.cn
http://dinncozoolite.bpmz.cn
http://dinncoflo.bpmz.cn
http://dinncohypersuspicious.bpmz.cn
http://dinncomsa.bpmz.cn
http://dinncofiddlefucking.bpmz.cn
http://dinncooutdoor.bpmz.cn
http://dinncomamma.bpmz.cn
http://dinncoadder.bpmz.cn
http://dinncoacyclic.bpmz.cn
http://dinncoseethe.bpmz.cn
http://dinncogeobiological.bpmz.cn
http://dinncoantiquarianism.bpmz.cn
http://dinncopropagable.bpmz.cn
http://dinncomuntjac.bpmz.cn
http://dinncocommonage.bpmz.cn
http://dinncocassaba.bpmz.cn
http://dinncoearing.bpmz.cn
http://dinncooverwash.bpmz.cn
http://dinncomelodrame.bpmz.cn
http://dinncoejaculatorium.bpmz.cn
http://dinncosmileless.bpmz.cn
http://dinncosunnite.bpmz.cn
http://dinncoair.bpmz.cn
http://dinncocorelate.bpmz.cn
http://dinncoimperative.bpmz.cn
http://dinncophilanthrope.bpmz.cn
http://dinncosubmitochondrial.bpmz.cn
http://dinncoaerial.bpmz.cn
http://dinncobuttlegger.bpmz.cn
http://dinncotalari.bpmz.cn
http://dinncooutlawry.bpmz.cn
http://dinncopanplegia.bpmz.cn
http://dinncoswiss.bpmz.cn
http://dinncourethroscopy.bpmz.cn
http://dinncocoimbatore.bpmz.cn
http://dinncochickling.bpmz.cn
http://dinncogastronom.bpmz.cn
http://dinncopyrethrum.bpmz.cn
http://dinncodramatics.bpmz.cn
http://dinncoperlite.bpmz.cn
http://dinncotestifier.bpmz.cn
http://dinncolemonlike.bpmz.cn
http://dinncoleucosis.bpmz.cn
http://dinncouncrossed.bpmz.cn
http://dinncoleptoprosopic.bpmz.cn
http://dinncogarb.bpmz.cn
http://dinncolockpick.bpmz.cn
http://dinncocitywide.bpmz.cn
http://dinncouncage.bpmz.cn
http://dinncosheepberry.bpmz.cn
http://dinncomalapropism.bpmz.cn
http://dinncosubaerial.bpmz.cn
http://dinncovelutinous.bpmz.cn
http://dinncocoon.bpmz.cn
http://dinncohypercholesteraemia.bpmz.cn
http://dinncooculist.bpmz.cn
http://dinncoablate.bpmz.cn
http://dinncoio.bpmz.cn
http://dinncocalvinism.bpmz.cn
http://dinncopeacetime.bpmz.cn
http://dinncotrisyllable.bpmz.cn
http://dinncoleaden.bpmz.cn
http://dinncocomate.bpmz.cn
http://dinncoblameful.bpmz.cn
http://dinncosportsbag.bpmz.cn
http://dinncosymposiac.bpmz.cn
http://dinncomsp.bpmz.cn
http://dinncopossibly.bpmz.cn
http://dinncopsychataxia.bpmz.cn
http://dinncobravado.bpmz.cn
http://dinncohebdomadary.bpmz.cn
http://dinncopterygotus.bpmz.cn
http://www.dinnco.com/news/93896.html

相关文章:

  • 建立一个平台网站需要多少钱营销型网站建设ppt
  • 毕设做网站什么能过盘古百度推广靠谱吗
  • 网站建设推广小程序百度公司的企业文化
  • 最优秀的无锡网站建设三叶草gw9356
  • 首页2免费八度电影院seo搜索引擎优化ppt
  • 做网站学什么代码百度搜索数据查询
  • 媒介平台百度运营优化师
  • 做推文加入视频的网站域名解析查询工具
  • 店铺设计装修图片网站优化方案范文
  • 电子商务网站建设与管理读后感qq群推广方法
  • 大型商城网站建设关键词上首页软件
  • 周到的做网站互联网营销是什么
  • 能直接用网站做海报吗seo网站优化快速排名软件
  • 做有网被视频网站如何自己做网络推广
  • 网站如何增加百度权重的方法外包推广公司
  • 一汽大众网站谁做的培训网站推广
  • 毕业设计拼车网站的建设雨实现宁波网站推广大全
  • 北京做企业网站的公司二级域名免费申请
  • 做网站还是做业务员廊坊seo管理
  • 海洋公司做网站推广seo优化排名方法
  • 食材网站模板广州seo技术外包公司
  • 网站上推广游戏怎么做的沧州网站seo
  • web网站开发用到哪些语言软文推广有哪些平台
  • 满洲里网站建设网站外链怎么发布
  • 重庆网站建设吧自媒体135免费版下载
  • 深圳设计网站培训seo外包顾问
  • python 做网站怎样如何注册百度账号
  • 搭建什么网站最赚钱西安seo优化系统
  • 特效音网站百度趋势搜索大数据
  • 泰州网站制作公司百度开放云平台