文章目录
- watcher由三个部分组成: zookeeper服务端、zookeeper客户端、客户端的ZKWatchManager对象。 接口设计: Watcher接口中含有一个内部接口Event,其中含有两个枚举KeeperStat(通知状态)和EventType(事件类型) public enum KeeperState { /** Unused, this state is never generated by the server */ @Deprecated Unknown (-1), /** The client is in the disconnected state – it is not connected * to any server in the ensemble. */ Disconnected (0), /** Unused, this state is never generated by the server */ @Deprecated NoSyncConnected (1), /** The client is in the connected state – it is connected * to a server in the ensemble (one of the servers specified * in the host connection parameter during ZooKeeper client * creation). */ SyncConnected (3), /** * Auth failed state */ AuthFailed (4), /** * The client is connected to a read-only server, that is the * server which is not currently connected to the majority. * The only operations allowed after receiving this state is * read operations. * This state is generated for read-only clients only since * read/write clients aren’t allowed to connect to r/o servers. */ ConnectedReadOnly (5), /** * SaslAuthenticated: used to notify clients that they are SASL-authenticated, * so that they can perform Zookeeper actions with their SASL-authorized permissions. */ SaslAuthenticated(6), /** The serving cluster has expired this session. The ZooKeeper * client connection (the session) is no longer valid. You must * create a new client connection (instantiate a new ZooKeeper * instance) if you with to access the ensemble. */ Expired (-112); private final int intValue; // Integer representation of value // for sending over wire KeeperState(int intValue) { this.intValue = intValue; } public int getIntValue() { return intValue; } public static KeeperState fromInt(int intValue) { switch(intValue) { case -1: return KeeperState.Unknown; case 0: return KeeperState.Disconnected; case 1: return KeeperState.NoSyncConnected; case 3: return KeeperState.SyncConnected; case 4: return KeeperState.AuthFailed; case 5: return KeeperState.ConnectedReadOnly; case 6: return KeeperState.SaslAuthenticated; case -112: return KeeperState.Expired; default: throw new RuntimeException(“Invalid integer value for conversion to KeeperState”); } } } public enum EventType { None (-1), NodeCreated (1), NodeDeleted (2), NodeDataChanged (3), NodeChildrenChanged (4); private final int intValue; // Integer representation of value // for sending over wire EventType(int intValue) { this.intValue = intValue; } public int getIntValue() { return intValue; } public static EventType fromInt(int intValue) { switch(intValue) { case -1: return EventType.None; case 1: return EventType.NodeCreated; case 2: return EventType.NodeDeleted; case 3: return EventType.NodeDataChanged; case 4: return EventType.NodeChildrenChanged; default: throw new RuntimeException(“Invalid integer value for conversion to EventType”); } } } 以node节点为例,说明调用的注册方法和可监听时间间的关系: 注册方式 Created ChildrenChanged Changed Deleted zk.exists(“/node”,watcher) 可监控 可监控 可监控 zk.getData(“/node”,watcher) 可监控 可监控 zk.getChildren(“/node”,watcher) 可监控 可监控
- KeeperState 通知状态 public class ZKWatcher implements Watcher{ static CountDownLatch latch = new CountDownLatch(1); static ZooKeeper zooKeeper; public static void main(String[] args) throws Exception{ Watcher watcher; zooKeeper = new ZooKeeper(“192.168.10.132:2181”, 5000, new ZKWatcher()); latch.await(); } public void process(WatchedEvent event) { if(event.getType() == Event.EventType.None){ if(event.getState() == Event.KeeperState.SyncConnected){ System.out.println(“连接成功”); latch.countDown(); }else if(event.getState() == Event.KeeperState.Disconnected){ System.out.println(“断开连接”); }else if(event.getState() == Event.KeeperState.Expired){ System.out.println(“会话超时”); }else if(event.getState() == Event.KeeperState.AuthFailed){ System.out.println(“认证失败”); } } } }
- //使用链接对象的监视器 exists(String path,boolean b) //自定义监视器 exists(String path,Watacher watcher) //NodeCreated:节点创建 //NodeDeleted:节点删除 //NodeDataChanged:节点内容发生变化
- //使用连接对象的监视器 getData(String path,boolean b,Stat stat) //自定义监视器 getData(String path,Watcher w,Stat stat) //NodeDeleted:节点删除 //NodeDataChanged:节点内容变化
- //使用连接对象的监视器 getChildren(String path,boolean b) //自定义监视器 getChildren(String path,Watcher w) //NodeDeleted:节点删除 //NodeChildrenChanged:子节点内容变化
watcher由三个部分组成:
zookeeper服务端、zookeeper客户端、客户端的ZKWatchManager对象。
接口设计:
Watcher接口中含有一个内部接口Event,其中含有两个枚举KeeperStat(通知状态)和EventType(事件类型)
public enum KeeperState {
/** Unused, this state is never generated by the server */
@Deprecated
Unknown (-1),
/** The client is in the disconnected state - it is not connected
* to any server in the ensemble. */
Disconnected (0),
/** Unused, this state is never generated by the server */
@Deprecated
NoSyncConnected (1),
/** The client is in the connected state - it is connected
* to a server in the ensemble (one of the servers specified
* in the host connection parameter during ZooKeeper client
* creation). */
SyncConnected (3),
/**
* Auth failed state
*/
AuthFailed (4),
/**
* The client is connected to a read-only server, that is the
* server which is not currently connected to the majority.
* The only operations allowed after receiving this state is
* read operations.
* This state is generated for read-only clients only since
* read/write clients aren't allowed to connect to r/o servers.
*/
ConnectedReadOnly (5),
/**
* SaslAuthenticated: used to notify clients that they are SASL-authenticated,
* so that they can perform Zookeeper actions with their SASL-authorized permissions.
*/
SaslAuthenticated(6),
/** The serving cluster has expired this session. The ZooKeeper
* client connection (the session) is no longer valid. You must
* create a new client connection (instantiate a new ZooKeeper
* instance) if you with to access the ensemble. */
Expired (-112);
private final int intValue; // Integer representation of value
// for sending over wire
KeeperState(int intValue) {
this.intValue = intValue;
}
public int getIntValue() {
return intValue;
}
public static KeeperState fromInt(int intValue) {
switch(intValue) {
case -1: return KeeperState.Unknown;
case 0: return KeeperState.Disconnected;
case 1: return KeeperState.NoSyncConnected;
case 3: return KeeperState.SyncConnected;
case 4: return KeeperState.AuthFailed;
case 5: return KeeperState.ConnectedReadOnly;
case 6: return KeeperState.SaslAuthenticated;
case -112: return KeeperState.Expired;
default:
throw new RuntimeException("Invalid integer value for conversion to KeeperState");
}
}
}
public enum EventType {
None (-1),
NodeCreated (1),
NodeDeleted (2),
NodeDataChanged (3),
NodeChildrenChanged (4);
private final int intValue; // Integer representation of value
// for sending over wire
EventType(int intValue) {
this.intValue = intValue;
}
public int getIntValue() {
return intValue;
}
public static EventType fromInt(int intValue) {
switch(intValue) {
case -1: return EventType.None;
case 1: return EventType.NodeCreated;
case 2: return EventType.NodeDeleted;
case 3: return EventType.NodeDataChanged;
case 4: return EventType.NodeChildrenChanged;
default:
throw new RuntimeException("Invalid integer value for conversion to EventType");
}
}
}
以node节点为例,说明调用的注册方法和可监听时间间的关系:
| 注册方式 | Created | ChildrenChanged | Changed | Deleted |
| zk.exists(“/node”,watcher) | 可监控 | 可监控 | 可监控 | |
| zk.getData(“/node”,watcher) | 可监控 | 可监控 | ||
| zk.getChildren(“/node”,watcher) | 可监控 | 可监控 |
KeeperState 通知状态
public class ZKWatcher implements Watcher{
static CountDownLatch latch = new CountDownLatch(1);
static ZooKeeper zooKeeper;
public static void main(String[] args) throws Exception{
Watcher watcher;
zooKeeper = new ZooKeeper("192.168.10.132:2181", 5000, new ZKWatcher());
latch.await();
}
public void process(WatchedEvent event) {
if(event.getType() == Event.EventType.None){
if(event.getState() == Event.KeeperState.SyncConnected){
System.out.println("连接成功");
latch.countDown();
}else if(event.getState() == Event.KeeperState.Disconnected){
System.out.println("断开连接");
}else if(event.getState() == Event.KeeperState.Expired){
System.out.println("会话超时");
}else if(event.getState() == Event.KeeperState.AuthFailed){
System.out.println("认证失败");
}
}
}
}
//使用链接对象的监视器
exists(String path,boolean b)
//自定义监视器
exists(String path,Watacher watcher)
//NodeCreated:节点创建
//NodeDeleted:节点删除
//NodeDataChanged:节点内容发生变化
//使用连接对象的监视器
getData(String path,boolean b,Stat stat)
//自定义监视器
getData(String path,Watcher w,Stat stat)
//NodeDeleted:节点删除
//NodeDataChanged:节点内容变化
//使用连接对象的监视器
getChildren(String path,boolean b)
//自定义监视器
getChildren(String path,Watcher w)
//NodeDeleted:节点删除
//NodeChildrenChanged:子节点内容变化


发表回复