策展人领导者选举错误,而连接字符串不是新的TestingServer()。getConnectString

时间:2017-09-18 08:55:09

标签: apache apache-zookeeper apache-curator

将示例代码复制到本地,将zk连接字符串从新的TestingServer()。getConnectString更改为“host:port”,得到错误:

  

错误org.apache.curator.framework.recipes.leader.LeaderLatch getChildren()失败。 rc = -6 [main-EventThread]

代码:

import org.apache.curator.framework.CuratorFramework
import org.apache.curator.framework.CuratorFrameworkFactory
import org.apache.curator.framework.recipes.leader.{LeaderLatch,LeaderLatchListener}
import org.apache.curator.retry.ExponentialBackoffRetry
import org.apache.curator.utils.CloseableUtils
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util

object Main {
  private val PATH = "/lead"

  def main(args: Array[String]): Unit = {
    val clients = new util.ArrayList[CuratorFramework]
    val lists = new util.ArrayList[LeaderLatch]()

    try {
      for (i <- 0 to 2) {
        val client = CuratorFrameworkFactory.newClient("xxxxx.org:2181", new ExponentialBackoffRetry(10000, 1))
        //val client =  CuratorFrameworkFactory.newClient(new TestingServer().getConnectString, new ExponentialBackoffRetry(10000, 1))

        clients.add(client)
        client.start()
        client.blockUntilConnected()

        val example = new LeaderLatch(client, PATH, i.toString)
        lists.add(example)

        example.start()

        example.addListener(new LeaderLatchListener {
            override def isLeader(): Unit = {
            println(s"I am the lead $i")
          }

          override def notLeader(): Unit = {
            println(s"i am not the leader any more $i")
          }
        })
      }

      Thread.sleep(5000)
      println("Press enter/return to quit\n")
      new BufferedReader(new InputStreamReader(System.in)).readLine
    }
    finally {
      System.out.println("Shutting down...")
      import scala.collection.JavaConversions._
      for(example <- lists)
        CloseableUtils.closeQuietly(example)
      for (client <- clients) {
        CloseableUtils.closeQuietly(client)
      }
    }
  }
}

利布斯:

libraryDependencies += "org.apache.curator" % "apache-curator" % "4.0.0"
libraryDependencies += "org.apache.curator" % "curator-framework" % "4.0.0"
libraryDependencies += "org.apache.curator" % "curator-recipes" % "4.0.0"
libraryDependencies += "org.apache.curator" % "curator-test" % "4.0.0"
libraryDependencies += "org.apache.curator" % "curator-x-discovery" % "4.0.0"
libraryDependencies += "org.apache.curator" % "curator-x-async" % "4.0.0"

3 个答案:

答案 0 :(得分:0)

想出来,理论上没什么,但有效。

  • 将策展人lib更改为3.3.0
  • zookeeper中的手动创建/引导节点

Zookeeper版本:3.4.10

所以它看起来像版本兼容性问题。

答案 1 :(得分:0)

您需要将zookeeper排除在策展人依赖项exclude("org.apache.zookeeper","zookeeper"),

之外

然后添加正确的zookeeper依赖项"org.apache.zookeeper" % "zookeeper" % "3.4.9"

我的zookeeper服务器是3.4.9

答案 2 :(得分:0)

zooker和策展人版本的兼容性。编辑Maven依赖关系,例如:

<dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-x-discovery</artifactId>
            <version>4.0.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
</dependency>