2

正如我们在 Java Linked Blocking Queue 中看到的,take() 方法在从队列中出列之前对尾节点进行锁定/保护。因此,没有 2 个线程会从尾部获取相同的节点。在zookeeper的情况下,所有观察队列根节点的进程都会得到通知,它们都可以抓取相同的节点集并开始处理相同的节点。

那么我怎么能称之为分布式队列呢。我说的是 Zookeeper 的生产者消费者收据。http://zookeeper.apache.org/doc/r3.4.1/zookeeperTutorial.html#sc_producerConsumerQueues

4

1 回答 1

1

在示例代码中,当使用代码时,

zk.delete(root + "/element" + min, 0);

只有 1 个节点会成功执行删除,尝试删除的每个其他进程都会抛出错误,因此消费者知道他是唯一消费该元素的节点。

于 2013-05-26T21:15:23.587 回答