<!-- If you need to report a security issue please visit https://github.com/apache/dubbo/security/policy -->

- [x] I have searched the [issues](https://github.com/apache/dubbo/issues) of this repository and believe that this is not a duplicate.

## Describe the proposal
<!-- Please use this for a concrete design proposal for functionality. -->
<!-- If you just want to request a new feature and discuss the possible business value, create a Feature Request. -->

Currently Dubbo-Kubernetes is implemented through the Watch mechanism. Compared with using informer, this way has some problems: 

- Using plain Watch is more prone to miss events (e.g. network problems) sometimes. But Informers solve problems as they include as internally it consists of a watcher, a lister and an in-memory cache.
- Informers use the Kubernetes API to learn about changes in the state of a Kubernetes cluster and use that information to maintain a cache (the indexer) of the current cluster state and to inform clients about the changes by calling handler functions. This cache can be used for quick lookup thereby reducing load on Kubernetes API server.
- Informers also allow you to add index to your client side data cache, in case you work with larger clusters with large datasets.

So I suggest to use informer instead of Watch.
ENDPOINTS_WATCHER.put(serviceName, watch);
    }
    private void watchPods(ServiceInstancesChangedListener listener, String serviceName) {
        Map<String, String> serviceSelector = getServiceSelector(serviceName);
        if (serviceSelector == null) {
            return;
        }
        Watch watch = kubernetesClient
            .pods()
            .inNamespace(namespace)
            .withLabels(serviceSelector)
            .watch(new Watcher<Pod>() {
                @Override
                public void eventReceived(Action action, Pod resource) {
                    if (Action.MODIFIED.equals(action)) {
                        if (logger.isDebugEnabled()) {
                            logger.debug("Received Pods Update Event. Current pod name: " + currentHostname);
                        }
                        notifyServiceChanged(serviceName, listener);
                    }
                }
                @Override
                public void onClose(WatcherException cause) {
                    
                }
            });
        PODS_WATCHER.put(serviceName, watch);
    }
    private void watchService(ServiceInstancesChangedListener listener, String serviceName) {
        Watch watch = kubernetesClient