配置文件
# 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。 tickTime=2000 # 初始化时连接到服务器端的间隔次数 initLimit=10 # ZK Leader 和follower之间通讯的次数,总时间5*2=10秒 syncLimit=5 # 保存数据的目录,默认情况下将写数据的日志文件也保存在这个目录里。 dataDir=D:\\apps\\zookeeper-3.3.6\\zookeeper_test_001\\tmp\\zookeeper # 日志目录 dataLogDir=D:\\apps\\zookeeper-3.3.6\\zookeeper_test_001\\logs # 这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。 clientPort=2181
Zookeeper客户端命令(zkCli.cmd)
zookeeper 集群(单机模拟)
第一份Zookeeper的配置文件
# 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。 tickTime=2000 # 初始化时连接到服务器端的间隔次数 initLimit=10 # ZK Leader 和follower之间通讯的次数,总时间5*2=10秒 syncLimit=5 # 保存数据的目录,默认情况下将写数据的日志文件也保存在这个目录里。 dataDir=D:\\apps\\zookeeper-3.3.6\\zookeeper_test_001\\tmp\\zookeeper # 日志目录 dataLogDir=D:\\apps\\zookeeper-3.3.6\\zookeeper_test_001\\logs # 这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。 clientPort=2181 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
第二份Zookeeper的配置文件
# 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。 tickTime=2000 # 初始化时连接到服务器端的间隔次数 initLimit=10 # ZK Leader 和follower之间通讯的次数,总时间5*2=10秒 syncLimit=5 # 保存数据的目录,默认情况下将写数据的日志文件也保存在这个目录里。 dataDir=D:\\apps\\zookeeper-3.3.6\\zookeeper_test_002\\tmp\\zookeeper # 日志目录 dataLogDir=D:\\apps\\zookeeper-3.3.6\\zookeeper_test_002\\logs # 这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。 clientPort=2182 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
第三份Zookeeper的配置文件
# 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。 tickTime=2000 # 初始化时连接到服务器端的间隔次数 initLimit=10 # ZK Leader 和follower之间通讯的次数,总时间5*2=10秒 syncLimit=5 # 保存数据的目录,默认情况下将写数据的日志文件也保存在这个目录里。 dataDir=D:\\apps\\zookeeper-3.3.6\\zookeeper_test_003\\tmp\\zookeeper # 日志目录 dataLogDir=D:\\apps\\zookeeper-3.3.6\\zookeeper_test_003\\logs # 这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。 clientPort=2183 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
配置文件server.N=YYY:A:B
JAVA 操作Zookeeper
/* 注册回调 */ Watcher watcher = new Watcher() { public void process(WatchedEvent event) { } }; try { ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 500000, watcher); //创建一个节点root,数据是mydata,不进行ACL权限控制,节点为永久性的(即客户端shutdown了也不会消失) zk.create("/root", "mydata".getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); //在root下面创建一个childone znode,数据为childone,不进行ACL权限控制,节点为永久性的 zk.create("/root/childone","childone".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); //取得/root节点下的子节点名称,返回List<string> zk.getChildren("/root",true); //取得/root/childone节点下的数据,返回byte[] zk.getData("/root/childone", true, null); //修改节点/root/childone下的数据,第三个参数为版本,如果是-1,那会无视被修改的数据版本,直接改掉 zk.setData("/root/childone","childonemodify".getBytes(), -1); //删除/root/childone这个节点,第二个参数为版本,-1的话直接删除,无视版本 zk.delete("/root/childone", -1); //关闭session zk.close(); } catch (IOException e) { e.printStackTrace(); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); }
<mirror> <id>kafeitu</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://maven.kafeitu.me/nexus/content/repositories/public</url> </mirror> <mirror> <id>ibiblio.org</id> <name>ibiblio Mirror of http://repo1.maven.org/maven2/</name> <url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url> <mirrorOf>*</mirrorOf> </mirror> <mirror> <id>lvu.cn</id> <name>lvu.cn</name> <url>http://lvu.cn/nexus/content/groups/public</url> <mirrorOf>*</mirrorOf> </mirror>
public class User implements java.io.Serializable{ private static final long serialVersionUID = -1591493796674994627L; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public User(String n){ this.name = n; } }
public interface UserService { public List<user> getUser(); } </user>
<!--- 接口依赖 --> <dependency> <groupId>dubbo-test</groupId> <artifactId>User-Server-Api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--- 第三方依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty</artifactId> <version>4.0.0.Alpha8</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.14</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.14</version> </dependency>
public class UserServiceImpl implements UserService{ public List<user> getUser(){ List<user> users = new ArrayList<user>(); users.add(new User("李连杰")); users.add(new User("成龙")); users.add(new User("吴京")); return users; } } </user></user></user>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="User-Server" /> <!-- 使用zookeeper注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 和本地bean一样实现服务 --> <bean id="userService" class="com.wwq.test.UserServiceImpl" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.wwq.test.UserService" ref="userService" /> </beans>
public class Main { public static void main(String[] args) throws Exception { /* 启动DUBBO服务 */ com.alibaba.dubbo.container.Main.main(args); } }
<!--- 接口依赖 --> <dependency> <groupId>dubbo-test</groupId> <artifactId>User-Server-Api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--- 第三方依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty</artifactId> <version>4.0.0.Alpha8</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.14</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.14</version> </dependency>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="User-consumer"/> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="userService" interface="com.wwq.test.UserService" /> </beans>
public class UserAction { public static void main(String[] args) { String connFile = "spring-dubbo.xml"; ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(connFile); UserService userService = (UserService)applicationContext.getBean("userService"); System.out.println(userService.getUser()); } }