docs: protected void recover() throws Exception {
          // register
          Set<Node> recoverRegistered = new HashSet<Node>(getRegistered());
          if (!recoverRegistered.isEmpty()) {
              if (LOGGER.isInfoEnabled()) {
                  LOGGER.info("Recover register node " + recoverRegistered);
              }
              for (Node node : recoverRegistered) {
                  register(node);
              }
          }
          // subscribe
          Map<Node, Set<NotifyListener>> recoverSubscribed = new HashMap<Node, Set<NotifyListener>>(getSubscribed());
          if (!recoverSubscribed.isEmpty()) {
              if (LOGGER.isInfoEnabled()) {
                  LOGGER.info("Recover subscribe node " + recoverSubscribed.keySet());
              }
              for (Map.Entry<Node, Set<NotifyListener>> entry : recoverSubscribed.entrySet()) {
                  Node node = entry.getKey();
                  for (NotifyListener listener : entry.getValue()) {
                      subscribe(node, listener);
                  }
              }
          }
      }