2013-05-16 2 views
2

Как мы видим в Java Linked Blocking Queue, метод take() принимает lock/gaurds хвостовой узел перед удалением очереди из очереди. Таким образом, ни один из двух потоков не будет брать один и тот же узел из хвоста. В случае zookeeper все процессы, наблюдающие за корневым узлом очереди, получат уведомление, и все они смогут захватить один и тот же набор узлов и начать обработку одних и тех же узлов.Zookeeper Queue with Lock

Так как же я могу назвать это распределенной очередью. Я говорю о том, как производитель Zookeeper выбирает производителя. http://zookeeper.apache.org/doc/r3.4.1/zookeeperTutorial.html#sc_producerConsumerQueues

ответ

1

В примере кода, потребляя код делает,

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

только один узел будет успешно выполнять удаление, любой другой процесс, который пытается удаления выдаст ошибку, так что потребитель знает, что он является единственным, кто потребляет этот элемент.