【问题标题】:What will happen if takeLeadership() never return when using Curator's Leader Election如果在使用 Curator 的 Leader Election 时 takeLeadership() 永远不会返回会发生什么
【发布时间】:2016-01-22 11:33:30
【问题描述】:
LeaderSelectorListener listener = new LeaderSelectorListenerAdapter()
    {
        public void takeLeadership(CuratorFramework client) throws Exception
        {
            while (true) {
               try {
                 // ... business logic
               } catch (Exception e) {  // catch any exeption here
                 // do nothing
               }
             }
        }
    }
LeaderSelector selector = new LeaderSelector(client, path, listener);
selector.autoRequeue();
selector.start();

正如代码所示,我在业务代码中捕获了任何异常,所以即使 zookeeper 断开连接,业务代码仍然会执行,对吧?

【问题讨论】:

  • 这是 Java 吗?这段代码的目的是什么(它有什么作用)?
  • 是的,这是基于curator框架的代码,只是一个例子。假设我有 3 台机器,但我希望这些机器中只有 1 台运行 takeLeadership() 中的业务逻辑。

标签: apache-zookeeper distributed-system apache-curator


【解决方案1】:

如果zookeeper断开连接,业务代码将不会执行。

LeaderSelectorListenerAdapter 类有一个方法stateChanged()。

这个方法会抛出一个CancelLeadershipException,当zk在SUSPENDED或LOST时,客户端退出并重新排队等待领导。

所以,别担心。

【讨论】:

    猜你喜欢
    • 2017-05-25
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多