客户端将初始值加1,然后写入server。
2个客户端输出的值的顺序是一致的。 说明客户端可已感知其他客户端的处理结果。
github 地址
https://github.com/noobthinker/zookeeper-simple-demo
贴代码区域
server
public class Server {
NIOServerCnxnFactory serverCnxnFactory;
public void zkStart(Conf conf) throws IOException, InterruptedException {
ZooKeeperServer zkServer = new ZooKeeperServer();
File dataDirectory = new File(conf.DIR);
FileTxnSnapLog ftxn = new FileTxnSnapLog(dataDirectory, dataDirectory);
zkServer.setTxnLogFactory(ftxn);
zkServer.setTickTime(conf.TICK_TIME);
serverCnxnFactory = new NIOServerCnxnFactory();
serverCnxnFactory.configure(new InetSocketAddress(conf.PORT), conf.MAX_CLIENT_CONNECTIONS);
serverCnxnFactory.startup(zkServer);
}
}
client
public class Client implements Watcher, AsyncCallback.StatCallback {
ZooKeeper zk;
boolean dead;
String znode;
Stat stat;
int index;
public void initZkClient(String ipport,int timetout,String znode) {
try {
this.znode = znode;
zk = new ZooKeeper(ipport, timetout, this);
stat = zk.exists(znode, false);
if(null == stat){
zk.create(znode,new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
}
zk.getData(znode,this,stat);
} catch (IOException e) {
e.printStackTrace();
}catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void processResult(int rc, String s, Object o, Stat stat) {
boolean exists;
switch (rc) {
case KeeperException.Code.Ok:
exists = true;
break;
case KeeperException.Code.NoNode:
exists = false;
break;
case KeeperException.Code.SessionExpired:
case KeeperException.Code.NoAuth:
dead = true;
return;
default:
zk.exists(znode, true, this, null);
return;
}
byte b[] = null;
if (exists) {
try {
b = zk.getData(znode, false, null);
System.out.println(new String(b));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
return;
}
}
}
public void process(WatchedEvent event) {
String path = event.getPath();
if (event.getType() == Event.EventType.None) {
switch (event.getState()) {
case SyncConnected:
break;
case Expired:
dead = true;
break;
}
} else {
if (path != null && path.equals(znode)) {
zk.exists(znode, true, this, null);
}
}
}
public void dataMaker(int i){
index=i;
int max=index+10;
boolean run=true;
while(run){
try {
zk.setData(znode, ((index++) + "").getBytes(), -1);
Thread.sleep(50);
if(index>max){
run=false;
zk.close();
}
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
conf
public class Conf {
public String DIR;
public int TICK_TIME;
public int PORT;
public int MAX_CLIENT_CONNECTIONS;
}
test 类
server
public class ZkServer {
public static void main(String[]args){
Conf conf = new Conf();
conf.DIR="/zookeeper";
conf.PORT=22801;
conf.TICK_TIME=2000;
conf.MAX_CLIENT_CONNECTIONS=60;
Server srv = new Server();
try {
srv.zkStart(conf);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
client1
public class ZkClient1 {
public static void main(String[]args){
Client client = new Client();
client.initZkClient("localhost:22801",3000,"/zka");
client.dataMaker(0);
}
}
client1 输出
0 20 1 21 2 22 3 23 4 24 5 25 6 26 7 27 8 28 9 29 10 30
client2
public class ZkClient2 {
public static void main(String[]args){
Client client = new Client();
client.initZkClient("localhost:22801",3000,"/zka");
client.dataMaker(20);
}
}
client2输出
20 1 21 2 22 3 23 4 24 5 25 6 26 7 27 8 28 9 29 10 30
2个端输出一致。
分享到:
相关推荐
- `clientPort`:客户端连接Zookeeper服务器的端口号,默认是2181。 - `tickTime`:Zookeeper的基本时间单位,用于心跳检测和其他内部定时任务,通常设置为2000毫秒。 - `initLimit`:初始化同步时,follower与...
`tickTime` 设定了基础时间单位,`initLimit` 和 `syncLimit` 分别是集群初始化同步和心跳同步的限制,`clientPort` 是客户端连接 ZooKeeper 的端口,而 `dataDir` 和 `dataLogDir` 分别是数据文件和日志文件的存储...
同时,如果需要多个ZooKeeper实例在同一台机器上运行,还需要设置不同的客户端连接端口(`clientPort`)。 4. **创建myid文件**:在`dataDir`目录下创建一个名为`myid`的文件,里面写入该ZooKeeper实例的ID(1到255...
2. `clientPort`:这是ZooKeeper对外提供服务的端口,默认是2181,可保持不变。 完成配置后,保存并关闭文件。 现在我们可以启动ZooKeeper服务了。使用`zkServer.sh`脚本的`start`命令: ```bash sh bin/zkServer....
在这个例子中,我们有三台服务器,IP地址分别为192.168.114.102、103和104,主机名为yz-yf-zookeeper01、02和03。为了运行Zookeeper,每台服务器都需要安装JDK 6或更高版本,因为Zookeeper依赖于Java环境。在配置...
`dataDir` 指定Zookeeper数据文件的位置,`dataLogDir` 是日志文件的存放路径,而`clientPort` 是客户端连接Zookeeper服务器的端口。在`server.A=B:C:D`配置中,A是服务器标识,B是服务器IP或主机名,C是用于集群...
特别地,设置`dataDir`、`clientPort`以及`server.x`参数,其中`x`对应于每个节点的编号,`2888`是选举端口,`3888`是同步端口。 **ZooKeeper配置详解:** - **tickTime**:这是ZooKeeper的时间单位,用于心跳检测...
节点鸽子客户端 该模块旨在类似于 Pigeon Java 客户端 API,但进行了一些调整以遵循 Node...zkserver = 127.0.0.1:2181 # Zookeeper host and port. 例子 远程服务“EchoService”: public class EchoService { pub
1. **Zookeeper安装包**:在这个例子中,我们使用的是`zookeeper3.8.0`,包含了Zookeeper的二进制文件。 2. **Shell脚本**:用于执行自动化部署任务,如解压安装包、配置环境变量、启动和停止Zookeeper服务等。 接...
服务器列表可以是IP地址或格式为`ip:serverPort:appPort`的组合,其中`serverPort`是Zookeeper服务器之间的通信端口,`appPort`是与其他应用程序通信的端口。 脚本会遍历服务器列表,通过SSH无密码登录到每一台机器...
--authorizer-properties zookeeper.connect=localhost:2181 \ --add --allow-principal User:client-user --topic my-topic ``` 4. **启动与测试**: - 更新配置后,重启Kafka集群和服务。 - 使用SASL/PLAIN...
除了`hbase-client.jar`,可能还包含其他相关的JAR包,如`hbase-common.jar`,它包含了HBase的通用工具和模块,`hbase-server.jar`包含RegionServer所需的服务端代码,以及`hbase-protocol.jar`包含客户端和服务器...
【标题】"dubbo 例子大全" 涵盖了基于Dubbo框架的全面示例,旨在帮助开发者深入理解和实践Dubbo的核心功能。Dubbo是中国阿里巴巴开源的一款高性能、轻量级的服务治理框架,它主要应用于分布式系统的微服务架构中,...
1. **Client**:客户端通过RPC(Remote Procedure Call)与HBase交互,既可以直接与HMaster通信进行管理操作,也可以直接与HRegionServer通信进行数据读写。 2. **Zookeeper**:Zookeeper集群在HBase中扮演着至关...
Zookeeper的配置文件中,`dataDir`指定了数据存储位置,`clientPort`是客户端连接的端口,`server.x`行定义了集群中的其他节点。 8. **启动和验证**:启动所有Zookeeper节点,确保它们能够正常通信并形成集群。然后...
1. 安装 zookeeper c client 2. 编译 php libzookper 扩展 3. 编译 php zookeeper 扩展 4. 修改 php.ini 配置,添加 libzookeeper 和 php-zookeeper 扩展 使用 PHP 生产、消费 Kafka 消息的例子: 1. 启动 ...
在3.7.1版本中,Zookeeper的配置文件`zoo.cfg`需要设置`dataDir`和`clientPort`等参数。Zookeeper还需要一个管理端口,这里是2180。 **安装步骤**: 1. 解压缩所有软件包到适当位置。 2. 配置Zookeeper的`zoo.cfg`...