-
Notifications
You must be signed in to change notification settings - Fork 4
zookeeper相关
略,套路。
watch机制下: true==(keeperState.SyncConnected==watchedEvent.getEvent()&&EventType.None==watchedEvent.getEvent().getType()) client与zk处于状态KeeperState. SyncConnected下时,会收到通知EventType.None,这两个同时满足说明zk连接成功。
zk.create("/NEED_SCHEDULE", "NEED_SCHEDULE".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL)
创建锁节点时有两个参数需要注意:
Ids.OPEN_ACL_UNSAFE:将所有ADMIN之外的权限授予每个人。如果用CREATOR_ALL_ACL表示所有权限赋予,在某些zookeeper版本会报错 InvalidACL for…,因为权限的安全程度有不同。
CreateMode.EPHEMERAL:会话结束年结点自动被删除,EPHEMERAL结点不允许有子节点。
Zk.create和这两个参数保证这样的原则:
1.保证任何时间有且只有一个定时任务在跑:因为有且只有一个服务器节点能够创捷成功定时任务节点。
2.保证当执行定时任务所在节点服务不可用时,其他节点会通过抢锁竞争重启一个新的定时任务:因为服务不可用意味着zk连接也断掉,zk断掉时,定时任务所节点会自动删除(CreateMode.EPHEMERAL保证),让出锁给其他服务节点竞争。
CreateMode
PERSISTENT:创建后只要不删就永久存在
EPHEMERAL:会话结束年结点自动被删除,EPHEMERAL结点不允许有子节点
SEQUENTIAL:节点名末尾会自动追加一个10位数的单调递增的序号,同一个节点的所有子节点序号是单调递增的
PERSISTENT_SEQUENTIAL:结合PERSISTENT和SEQUENTIAL
EPHEMERAL_SEQUENTIAL:结合EPHEMERAL和SEQUENTIAL