![image](https://user-images.githubusercontent.com/26990889/143370839-615581cb-28f9-4ba3-a110-ab58a2c97b77.png)
apollo 配置中心的 close 方法被注释，导致调用的时候直接调用接口的 default 方法，接口的默认实现是抛异常
public void onChange(com.ctrip.framework.apollo.model.ConfigChangeEvent changeEvent) {
            for (String key : changeEvent.changedKeys()) {
                ConfigChange change = changeEvent.getChange(key);
                if ("".equals(change.getNewValue())) {
                    logger.warn("an empty rule is received for " + key + ", the current working rule is " +
                            change.getOldValue() + ", the empty rule will not take effect.");
                    return;
                }
                ConfigChangedEvent event = new ConfigChangedEvent(key, change.getNamespace(), change.getNewValue(), getChangeType(change));
                listeners.forEach(listener -> listener.process(event));
            }
        }
        private ConfigChangeType getChangeType(ConfigChange change) {
            if (change.getChangeType() == PropertyChangeType.DELETED) {
                return ConfigChangeType.DELETED;
            }
            return ConfigChangeType.MODIFIED;
        }
        void addListener(ConfigurationListener configurationListener) {
            this.listeners.add(configurationListener);
        }
        void removeListener(ConfigurationListener configurationListener) {
            this.listeners.remove(configurationListener);
        }
        boolean hasInternalListener() {
            return listeners != null && listeners.size() > 0;
        }
    }
}