use of com.alipay.sofa.registry.client.api.Subscriber 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;
}
use of com.alipay.sofa.registry.client.api.Subscriber in project dubbo by alibaba.
the class SofaRegistryServiceDiscovery method registerServiceWatcher.
protected void registerServiceWatcher(String serviceName, ServiceInstancesChangedListener listener) {
Subscriber subscriber = subscribers.get(serviceName);
if (null == subscriber) {
final CountDownLatch latch = new CountDownLatch(1);
SubscriberRegistration subscriberRegistration = new SubscriberRegistration(serviceName, (dataId, data) -> {
handleRegistryData(dataId, data, listener, latch);
});
subscriberRegistration.setGroup(DEFAULT_GROUP);
subscriberRegistration.setScopeEnum(ScopeEnum.global);
subscriber = registryClient.register(subscriberRegistration);
subscribers.put(serviceName, subscriber);
waitAddress(serviceName, latch);
}
}
use of com.alipay.sofa.registry.client.api.Subscriber in project dubbo by alibaba.
the class SofaRegistry method doSubscribe.
@Override
public void doSubscribe(URL url, final NotifyListener listener) {
if (!url.getParameter(SUBSCRIBE_KEY, true) || PROVIDER_PROTOCOL.equals(url.getProtocol())) {
return;
}
String serviceName = buildServiceName(url);
// com.alipay.test.TestService:1.0:group@dubbo
Subscriber listSubscriber = subscribers.get(serviceName);
if (listSubscriber != null) {
logger.warn("Service name [" + serviceName + "] have bean registered in SOFARegistry.");
CountDownLatch countDownLatch = new CountDownLatch(1);
handleRegistryData(listSubscriber.peekData(), listener, countDownLatch);
waitAddress(serviceName, countDownLatch);
return;
}
final CountDownLatch latch = new CountDownLatch(1);
SubscriberRegistration subscriberRegistration = new SubscriberRegistration(serviceName, (dataId, data) -> {
// record change
printAddressData(dataId, data);
handleRegistryData(data, listener, latch);
});
addAttributesForSub(subscriberRegistration);
listSubscriber = registryClient.register(subscriberRegistration);
subscribers.put(serviceName, listSubscriber);
waitAddress(serviceName, latch);
}
use of com.alipay.sofa.registry.client.api.Subscriber in project dubbo by apache.
the class SofaRegistry method doSubscribe.
@Override
public void doSubscribe(URL url, final NotifyListener listener) {
if (!url.getParameter(SUBSCRIBE_KEY, true) || PROVIDER_PROTOCOL.equals(url.getProtocol())) {
return;
}
String serviceName = buildServiceName(url);
// com.alipay.test.TestService:1.0:group@dubbo
Subscriber listSubscriber = subscribers.get(serviceName);
if (listSubscriber != null) {
logger.warn("Service name [" + serviceName + "] have bean registered in SOFARegistry.");
CountDownLatch countDownLatch = new CountDownLatch(1);
handleRegistryData(listSubscriber.peekData(), listener, countDownLatch);
waitAddress(serviceName, countDownLatch);
return;
}
final CountDownLatch latch = new CountDownLatch(1);
SubscriberRegistration subscriberRegistration = new SubscriberRegistration(serviceName, (dataId, data) -> {
// record change
printAddressData(dataId, data);
handleRegistryData(data, listener, latch);
});
addAttributesForSub(subscriberRegistration);
listSubscriber = registryClient.register(subscriberRegistration);
subscribers.put(serviceName, listSubscriber);
waitAddress(serviceName, latch);
}
use of com.alipay.sofa.registry.client.api.Subscriber in project dubbo by apache.
the class SofaRegistryServiceDiscovery method registerServiceWatcher.
protected void registerServiceWatcher(String serviceName, ServiceInstancesChangedListener listener) {
Subscriber subscriber = subscribers.get(serviceName);
if (null == subscriber) {
final CountDownLatch latch = new CountDownLatch(1);
SubscriberRegistration subscriberRegistration = new SubscriberRegistration(serviceName, (dataId, data) -> {
handleRegistryData(dataId, data, listener, latch);
});
subscriberRegistration.setGroup(DEFAULT_GROUP);
subscriberRegistration.setScopeEnum(ScopeEnum.global);
subscriber = registryClient.register(subscriberRegistration);
subscribers.put(serviceName, subscriber);
waitAddress(serviceName, latch);
}
}
Aggregations