• 小白
    2019-09-01
    老师, zookeeper 3.5.5分支上的源码是支持maven构建的。
    git clone https://github.com/apache/zookeeper.git
    git checkout branch-3.5.5
    cd zookeeper
    “修改根pom.xm中git-commit-id-plugin的version为3.0.1,自带的2.2.5在maven中央库里没有不知道为什么"
    mvn install -Dmaven.skip.test=rue 或直接使用IDEA的导入maven项目功能
    运行zookeeper-recipes-queue中的单元测试文件DistributedQueueTest:
    cd zookeeper-recipes/zookeeper-recipes-queue
    mvn test -Dtest=org.apache.zookeeper.recipes.queue.DistributedQueueTest
    展开

    作者回复: 多谢,这样大部分学员可以不用Ant了。

    
     11
  • fancion
    2019-09-11
    老师好,所以element方法作用是返回的队列的对头吗?

    作者回复: 是的

    
     1
  • 王金龙
    2019-08-24
    现在是用maven的吧,您视频里说是用ant

    作者回复: 1. ZooKeeper源代码用的是Ant+Ivy。
    2. Curator源代码用的是maven。
    3. 我自己的项目用的是Gradle。

    这节讲的分布式队列是包含在ZooKeeper源代码中的,所以用的是Ant+Ivy。

    
     1
  • Dovelol
    2019-08-23
    老师好,能讲一下这个分布式队列的缺点吗?如果一直不添加元素,所有客户端会一直循环获取,客户端比较多的情况下对性能影响大吗?

    作者回复: 只有返回的orderedChildren不为空,但是orderedChildren的所有元素被其他用户出站才会重试。如果返回的orderedChildren为空,会立刻返回。对性能应该影响不大,因为读操作是一个ZooKeeper节点在本地就能处理的。

    另外也可以在发现orderedChildren的所有元素被其他用户出站时返回,这样的队列实现也是对的。

    
     1
  • Dovelol
    2019-08-23
    老师好,这个分布式协同队列是zk自己实现的源码吗? 那就是说可以有api直接用,能讲下应用场景吗?

    作者回复: 和单机的并发队列一样,这个分布式协同队列可以用来做生产者和消费者的协同。

    ZooKeeper的源码zookeeper-recipes/zookeeper-recipes-queue目录下提供了一个分布式协同队列的实现。另外Apache Curator也提供了分布式协同队列的实现。建议使用Apache Curator的实现。

    
     1
  • gogo
    2019-08-21

    1. create方法是跟其他的方法类似,也是采用重试机制吧? 那create失败了,就是会一直重试吗?

    2. element方法取到的childNames是快照 那后面再调用element的时候,子节点在取到之后,被get之前已经被其他线程全部remove了,此时调用element这个方法的线程是一直重试吗?

    3. 同样的remove方法取到了子节点们,但是去真正remove的时候,发现已经不在子节点中了,会一直重试吗?
    展开

    作者回复: 1. ZooKeeper API(例如create)不会重试,Curator提供的API有重试机制。
    2. 是的。
    3. 是的。

     2
     1
  • 凌霄
    2019-08-19
    不过瘾,上干货吧!

    作者回复: 后面的内容会比较深入

    
     1
  • 当猪真快活
    2019-12-29
    老师您好!

    我有几个疑问,分布式队列的应用场景是什么?优点是什么?缺点是什么?能和消息队列对比下吗?
    
    
  • tony007
    2019-12-23
    多个客户端如何保证线程安全?
    
    
  • 豆子高
    2019-10-14
    老师 能讲一下 DistributedQueueTest 测试类里面的逻辑嘛 讲一个就行了 看起来有点吃力 尤其是运行测试方法时先会执行tearDown()方法 整个逻辑不是很明白 跟前面讲的基础 需要老师指点一下 不然不知道怎么连接起来

    作者回复: 带有Before注解的方法会在测试用例运行之前执行,带有After注解的方法会在测试用例运行之后执行。所以测试用例testOffer1()的执行过程如下所示:

    1. ClientBase.setUp()启动一个ZooKeeper节点。
    2. DistributedQueueTest.testOffer1()创建一个DistributedQueue,先入队,然后出队,验证出队元素和入队元素是相等的。
    3. DistributedQueueTest.tearDown()停止ZooKeeper节点。

    
    
  • 小肚腩era
    2019-08-25
    看完了,期待老师后面更深入的讲解

    作者回复: 好的

    
    
  • Leon📷
    2019-08-21
    分布式协同队列的源代码在github上没找到啊

    作者回复: 这个用的是ZooKeeper自带的源代码。需要按第10节讲的那样把ZooKeeper的源代码弄到IDE中去。

    
    
  • Leon📷
    2019-08-21
    这种分布式协同队列可以理解为单机的无锁队列吧。每个线程操作都是原子性的,类似cmpchg这样。客户端无需自己来创建锁就可以维持数据一致性

    作者回复: 您说的很对,分布式协同队列和单机的无锁队列在设计理念上是相同的。它们都是non-blocking的算法。

    
    
  • coderfone
    2019-08-21
    老师,请我zookeeper api 跟ZkCli和Curator客户端有什么区别?

    作者回复: 1. ZkCli.sh是ZooKeeper提供的一个shell,可以在这个shell里面使用命令操作ZooKeeper。这些命令都是对ZooKeeper API的封装。
    2. Curator是在ZooKeeper API上面封装的一个high level API。

    
    
我们在线,来聊聊吧