protected void doSubscribe()

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);
        }
    }