code: protected void subscribeOverride(final ConsumerConfig config, ConfigListener listener) {
          try {
              if (overrideObserver == null) { // 初始化
                  overrideObserver = new ZookeeperOverrideObserver();
              }
              overrideObserver.addConfigListener(config, listener);
              final String overridePath = buildOverridePath(rootPath, config);
              final AbstractInterfaceConfig registerConfig = getRegisterConfig(config);
              // 监听配置节点下 子节点增加、子节点删除、子节点Data修改事件
              PathChildrenCache pathChildrenCache = new PathChildrenCache(zkClient, overridePath, true);
              pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
                  @Override
                  public void childEvent(CuratorFramework client1, PathChildrenCacheEvent event) throws Exception {
                      if (LOGGER.isDebugEnabled(config.getAppName())) {
                          LOGGER.debug("Receive zookeeper event: " + "type=[" + event.getType() + "]");
                      }
                      switch (event.getType()) {
                          case CHILD_ADDED: //新增IP级配置
                              overrideObserver.addConfig(config, overridePath, event.getData());
                              break;
                          case CHILD_REMOVED: //删除IP级配置
                              overrideObserver.removeConfig(config, overridePath, event.getData(), registerConfig);
                              break;
                          case CHILD_UPDATED:// 更新IP级配置
                              overrideObserver.updateConfig(config, overridePath, event.getData());
                              break;
                          default:
                              break;
                      }
                  }
              });
              pathChildrenCache.start(PathChildrenCache.StartMode.BUILD_INITIAL_CACHE);
              INTERFACE_OVERRIDE_CACHE.put(overridePath, pathChildrenCache);
              overrideObserver.updateConfigAll(config, overridePath, pathChildrenCache.getCurrentData());
          } catch (Exception e) {
              throw new SofaRpcRuntimeException("Failed to subscribe provider config from zookeeperRegistry!", e);
          }
      }
docs: 订阅IP级配置（服务发布暂时不支持动态配置,暂时支持订阅ConsumerConfig参数设置）
  
  @param config   consumer config
  @param listener config listener