作者回复: 多谢,这样大部分学员可以不用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. 是的。
作者回复: 后面的内容会比较深入
作者回复: ZooKeeper保证的是以下的数据一致性: 1. Linearizable writes: 所有更新ZooKeeper状态的操作保证可线性化的数据一致性。 2. FIFO client order: 来自一个client的所有操作按照client发送操作请求的顺序执行。 多个客户端保证第一点。
作者回复: 带有Before注解的方法会在测试用例运行之前执行,带有After注解的方法会在测试用例运行之后执行。所以测试用例testOffer1()的执行过程如下所示: 1. ClientBase.setUp()启动一个ZooKeeper节点。 2. DistributedQueueTest.testOffer1()创建一个DistributedQueue,先入队,然后出队,验证出队元素和入队元素是相等的。 3. DistributedQueueTest.tearDown()停止ZooKeeper节点。
作者回复: 好的