use of com.alipay.sofa.registry.client.api.registration.ConfiguratorRegistration in project sofa-rpc by sofastack.
the class SofaRegistry method subscribe.
@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;
}
Aggregations