docs: private void updateServiceCache(String serviceName, ConcurrentHashMap<String, List<URL>> serviceUrls, boolean needNotify) {
          if (serviceUrls != null && !serviceUrls.isEmpty()) {
              List<URL> urls = serviceCache.get(serviceName);
              if (urls == null) {
                  if(logger.isDebugEnabled()) {
                      try {
                          logger.debug("serviceUrls = " + Config.getInstance().getMapper().writeValueAsString(serviceUrls));
                      } catch(Exception e) {
                      }
                  }
                  serviceCache.put(serviceName, serviceUrls.get(serviceName));
              }
              for (Map.Entry<String, List<URL>> entry : serviceUrls.entrySet()) {
                  boolean change = true;
                  if (urls != null) {
                      List<URL> newUrls = entry.getValue();
                      if (newUrls == null || newUrls.isEmpty() || ConsulUtils.isSame(newUrls, urls)) {
                          change = false;
                      } else {
                          serviceCache.put(serviceName, newUrls);
                      }
                  }
                  if (change && needNotify) {
                      notifyExecutor.execute(new NotifyService(entry.getKey(), entry.getValue()));
                      logger.info("light service notify-service: " + entry.getKey());
                      StringBuilder sb = new StringBuilder();
                      for (URL url : entry.getValue()) {
                          sb.append(url.getUri()).append(";");
                      }
                      logger.info("consul notify urls:" + sb.toString());
                  }
              }
          }
      }