private void subscribeDr()

in dubbo-kubernetes/src/main/java/org/apache/dubbo/registry/kubernetes/KubernetesMeshEnvListener.java [136:185]


    private void subscribeDr(String appName) {
        if (drAppWatch.containsKey(appName)) {
            return;
        }

        try {
            Watch watch = kubernetesClient
                    .genericKubernetesResources(MeshConstant.getDrDefinition())
                    .inNamespace(namespace)
                    .withName(appName)
                    .watch(new Watcher<GenericKubernetesResource>() {
                        @Override
                        public void eventReceived(Action action, GenericKubernetesResource resource) {
                            if (logger.isInfoEnabled()) {
                                logger.info("Received VS Rule notification. AppName: " + appName + " Action:" + action
                                        + " Resource:" + resource);
                            }

                            if (action == Action.ADDED || action == Action.MODIFIED) {
                                String drRule = new Yaml(new SafeConstructor(new LoaderOptions())).dump(resource);

                                drAppCache.put(appName, drRule);
                                if (vsAppCache.containsKey(appName)) {
                                    notifyListener(vsAppCache.get(appName), appName, drRule);
                                }
                            } else {
                                appRuleListenerMap.get(appName).receiveConfigInfo("");
                            }
                        }

                        @Override
                        public void onClose(WatcherException cause) {
                            // ignore
                        }
                    });
            drAppWatch.put(appName, watch);
            try {
                GenericKubernetesResource drRule = kubernetesClient
                        .genericKubernetesResources(MeshConstant.getDrDefinition())
                        .inNamespace(namespace)
                        .withName(appName)
                        .get();
                drAppCache.put(appName, new Yaml(new SafeConstructor(new LoaderOptions())).dump(drRule));
            } catch (Throwable ignore) {

            }
        } catch (Exception e) {
            logger.error(REGISTRY_ERROR_LISTEN_KUBERNETES, "", "", "Error occurred when listen kubernetes crd.", e);
        }
    }