class SofaRegistry extends Registry {

    @Override
    public List<ProviderGroup> subscribe(ConsumerConfig config) {
        ProviderInfoListener providerInfoListener = config.getProviderInfoListener();
        String appName = config.getAppName();
        if (!registryConfig.isSubscribe()) {
            // 注册中心不订阅
            if (LOGGER.isInfoEnabled(appName)) {
                LOGGER.infoWithApp(appName, LogCodes.getLog(LogCodes.INFO_REGISTRY_IGNORE));
            }
            return null;
        }
        if (!config.isSubscribe()) {
            // 服务不订阅
            return null;
        }

        String serviceName = SofaRegistryHelper.buildListDataId(config, config.getProtocol());

        SofaRegistrySubscribeCallback callback;

        Subscriber listSubscriber = subscribers.get(serviceName);
        Configurator attrSubscriber;
        if (listSubscriber != null && providerInfoListener != null) {
            // 已经有人订阅过这个Key，那么地址已经存在了，
            callback = (SofaRegistrySubscribeCallback) listSubscriber.getDataObserver();
            callback.addProviderInfoListener(serviceName, config, providerInfoListener);
            // 使用旧数据通知下
            callback.handleDataToListener(serviceName, config, providerInfoListener);
        } else {

            callback = new SofaRegistrySubscribeCallback();

            callback.addProviderInfoListener(serviceName, config, providerInfoListener);

            // 生成订阅对象，并添加额外属性
            SubscriberRegistration subscriberRegistration = new SubscriberRegistration(serviceName, callback);
            String groupId = config.getParameter(SofaRegistryConstants.SOFA_GROUP_KEY);
            groupId = groupId == null ? SofaRegistryHelper.SUBSCRIBER_LIST_GROUP_ID : groupId;
            addAttributes(subscriberRegistration, groupId);

            ConfiguratorRegistration configRegistration = new ConfiguratorRegistration(serviceName, callback);
            addAttributes(configRegistration, SofaRegistryHelper.SUBSCRIBER_CONFIG_GROUP_ID);

            // 去配置中心订阅

            // 去注册
            listSubscriber = SofaRegistryClient.getRegistryClient(appName, registryConfig).register(
                subscriberRegistration);

            attrSubscriber = SofaRegistryClient.getRegistryClient(appName, registryConfig).register(configRegistration);

            // 放入缓存
            subscribers.put(serviceName, listSubscriber);
            configurators.put(serviceName, attrSubscriber);
        }
        // 统一走异步获取地址，所以此处返回null
        return null;
    }

    protected  SofaRegistry(RegistryConfig registryConfig);

}