作者回复: 多谢,这样大部分学员可以不用Ant了。
作者回复: 是的
作者回复: 1. ZooKeeper源代码用的是Ant+Ivy。
2. Curator源代码用的是maven。
3. 我自己的项目用的是Gradle。
这节讲的分布式队列是包含在ZooKeeper源代码中的,所以用的是Ant+Ivy。
作者回复: 只有返回的orderedChildren不为空,但是orderedChildren的所有元素被其他用户出站才会重试。如果返回的orderedChildren为空,会立刻返回。对性能应该影响不大,因为读操作是一个ZooKeeper节点在本地就能处理的。
另外也可以在发现orderedChildren的所有元素被其他用户出站时返回,这样的队列实现也是对的。
作者回复: 和单机的并发队列一样,这个分布式协同队列可以用来做生产者和消费者的协同。
ZooKeeper的源码zookeeper-recipes/zookeeper-recipes-queue目录下提供了一个分布式协同队列的实现。另外Apache Curator也提供了分布式协同队列的实现。建议使用Apache Curator的实现。
作者回复: 1. ZooKeeper API(例如create)不会重试,Curator提供的API有重试机制。
2. 是的。
3. 是的。
作者回复: 后面的内容会比较深入
作者回复: 带有Before注解的方法会在测试用例运行之前执行,带有After注解的方法会在测试用例运行之后执行。所以测试用例testOffer1()的执行过程如下所示:
1. ClientBase.setUp()启动一个ZooKeeper节点。
2. DistributedQueueTest.testOffer1()创建一个DistributedQueue,先入队,然后出队,验证出队元素和入队元素是相等的。
3. DistributedQueueTest.tearDown()停止ZooKeeper节点。
作者回复: 好的
作者回复: 这个用的是ZooKeeper自带的源代码。需要按第10节讲的那样把ZooKeeper的源代码弄到IDE中去。
作者回复: 您说的很对,分布式协同队列和单机的无锁队列在设计理念上是相同的。它们都是non-blocking的算法。
作者回复: 1. ZkCli.sh是ZooKeeper提供的一个shell,可以在这个shell里面使用命令操作ZooKeeper。这些命令都是对ZooKeeper API的封装。
2. Curator是在ZooKeeper API上面封装的一个high level API。