in registry-api/src/main/java/com/alibaba/dubbo/registry/kubernetes/KubernetesRegistry.java [67:107]
protected void doSubscribe(final URL url, final NotifyListener notifyListener) {
String[] serviceDesc = url.getServiceKey().split("\\.");
String kubernateTarget = System.getenv(serviceDesc[serviceDesc.length - 1] + "_target");
if (StringUtils.isEmpty(kubernateTarget)) {
return;
}
URI targetUri = URI.create(kubernateTarget);
String targetPath = Preconditions.checkNotNull(targetUri.getPath(), "targetPath");
Preconditions.checkArgument(targetPath.startsWith("/"),
"the path component (%s) of the target (%s) must start with '/'", targetPath, targetUri);
String[] parts = targetPath.split("/");
if (parts.length != 4) {
throw new IllegalArgumentException("Must be formatted like kubernetes:///{namespace}/{service}/{port}");
}
try {
int targetPort = Integer.valueOf(parts[3]);
String targetName = parts[1];
String targetNameSpace = parts[2];
Endpoints endpoints = kubernetesClient.endpoints().inNamespace(targetNameSpace)
.withName(targetName)
.get();
if (endpoints == null) {
// Didn't find anything, retrying
TIMER_SERVICE.schedule(() -> {
doSubscribe(url, notifyListener);
}, 30, TimeUnit.SECONDS);
return;
}
update(endpoints, notifyListener, targetPort);
watch(notifyListener, targetNameSpace, targetName, targetPort);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Unable to parse port number", e);
}
}