code: public static boolean isServiceNode(ChildData zNode) {
          String path = zNode.getPath();
          LOG.debug("正在检查节点路径:   " + path);
          LOG.debug("服务注册路径：   " + getNodeBasePath());
          if (!path.startsWith(getNodeBasePath()) || path.equals(getNodeBasePath())) {
              return false;
          }
          String name = path.substring((getNodeBasePath() + "/").length());
          String[] names = name.split("/");
          if (names.length != 2) {
              return false;
          }
          /*if (!SystemEnum.isServiceNodeName(names[0])) {
              todo 由于去掉了systemEnum类，我们在watch到zk外部服务注册事件之前，根本不知道到底有哪些application
              return false;
          }*/
          String zNodeDataStr = new String(zNode.getData());
          JSONObject zNodeData;
          try {
              zNodeData = JSON.parseObject(zNodeDataStr);
          } catch (JSONException notJsonString) {
              LOG.debug(String.format("节点%s的data是%s，它不是我们要找的那个服务节点，排除掉！  这是我期待结果之一，不打印堆栈", path, zNodeDataStr));
              return false;
          }
          try {
              if (zNodeData.getJSONObject("payload") == null) {
                  LOG.debug(String.format("节点=%s，内容=%s，其内缺少payload属性，它不是我们预期的服务节点！", path, zNodeDataStr));
                  return false;
              }
          } catch (JSONException payloadIsNotJsonString) {
              LOG.info(String.format("节点%s的data=%s,其内的payload属性是不是json格式，肯定是有非预期的节点混入，这里排除之", path, zNodeDataStr));
              return false;
          }
          return true;
      }
docs: 形如 /env/cluster_name/nodes/application/xxxx的节点才是服务节点，其他都不是