Zookeeper 如果使用馆长的领导者选举时takeLeadership()从未返回,会发生什么情况

sbtkgmzw  于 2022-12-09  发布在  Apache
关注(0)|答案(1)|浏览(143)
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断开连接,业务代码仍将执行,对吗?

ddrv8njm

ddrv8njm1#

如果zookeeper断开连接,业务代码将不会执行。
LeaderSelectorListenerAdapter有一个方法stateChanged()
当zk在SUSPENDEDLOST中时,此方法将抛出一个CancelLeadershipException,使客户端退出并重新排队等待领导。
所以别担心

相关问题