Zookeeper学习

Zookeeper开发(05)任务队列化

2019-01-20  本文已影响1人  郭艺宾

系统最后的组件为Client应⽤程序队列化新任务,以便从节点执⾏这些任务,我们会在/tasks节点下添加⼦节点来表⽰需要从节点需要执⾏的命令。我们将会使⽤有序节点,这样做有两个好处,第⼀,序列号指定了任务被队列化的顺序;第⼆,可以通过很少的⼯作为任务创建基于序列号的唯⼀路径。我们的Client代码如下:

①我们在/tasks节点下创建znode节点来标识⼀个任务,节点名称前缀为task-。

②因为我们使用的是CreateMode.SEQUENTIAL模式的节点,task-后面会跟随⼀个单调递增的数字,这样就可以保证为每个任务创建的znode节点的名称是唯⼀的,同时ZooKeeper会确定任务的顺序。

③我们⽆法确定使用CreateMode.SEQUENTIAL调用create的序列号,create⽅法会返回新建节点的名称。

④如果我们在执⾏create时遇到连接丢失,我们需要重试create操作。因为多次执⾏创建操作,也许会为⼀个任务建立多个znode节点,对于⼤多数⾄少执⾏⼀次(execute-at-least-once)策略的应用程序,也没什么问题。对于某些最多执⾏⼀次(execute-at-most-once)策略的应用程序,我们就需要多⼀些额外⼯作:我们需要为每⼀个任务指定⼀个唯⼀的ID(如会话ID),并将其编码到znode节点名中,在遇到连接丢失的异常时,我们只有在/tasks下不存在以这个会话ID命名的节点时才重试命令。

当我们运⾏Client应⽤程序并发送⼀个命令时,/tasks节点下就会创建⼀个新的znode节点,该节点并不是临时性节点,因此即使Client程序结束了,这个节点依然会存在。

上一篇 下一篇

猜你喜欢

热点阅读