예제 #1
0
 public static List<Provider> route(
     String serviceName,
     String consumerAddress,
     String consumerQueryUrl,
     List<Provider> providers,
     List<Override> overrides,
     List<Route> routes,
     Map<String, List<String>> clusters,
     List<Route> routed) {
   if (providers == null) {
     return null;
   }
   Map<String, String> urls = new HashMap<String, String>();
   urls.put(
       "consumer://" + consumerAddress + "/" + serviceName,
       consumerQueryUrl); // not empty dummy data
   for (Provider provider : providers) {
     if (com.alibaba.dubbo.governance.web.common.pulltool.Tool.isProviderEnabled(
         provider, overrides)) {
       urls.put(provider.getUrl(), provider.getParameters());
     }
   }
   urls =
       RouteUtils.route(
           serviceName, consumerAddress, consumerQueryUrl, urls, routes, clusters, routed);
   List<Provider> result = new ArrayList<Provider>();
   for (Provider provider : providers) {
     if (urls.containsKey(provider.getUrl())) {
       result.add(provider);
     }
   }
   return result;
 }
예제 #2
0
파일: Index.java 프로젝트: surlymo/dubbo
 public void execute(Context context) {
   Set<String> applications = new HashSet<String>();
   Set<String> services = new HashSet<String>();
   List<Provider> pList = new ArrayList<Provider>();
   try {
     pList = providerService.findAll();
   } catch (Exception e) {
     logger.error(e.getMessage(), e);
   }
   for (Provider p : pList) {
     applications.add(p.getApplication());
     services.add(p.getService());
   }
   List<Consumer> cList = new ArrayList<Consumer>();
   try {
     cList = consumerService.findAll();
   } catch (Exception e) {
     logger.error(e.getMessage(), e);
   }
   for (Consumer c : cList) {
     applications.add(c.getApplication());
     services.add(c.getService());
   }
   context.put("rootContextPath", new RootContextPath(request.getContextPath()));
   context.put("services", services.size());
   context.put("providers", pList.size());
   context.put("consumers", cList.size());
   context.put("applications", applications.size());
 }
예제 #3
0
 private List<Owner> toOverrideLiset(List<Provider> pList, List<Override> cList) {
   Map<String, Owner> oList = new HashMap<String, Owner>();
   for (Provider p : pList) {
     if (p.getUsername() != null) {
       for (String username : Constants.COMMA_SPLIT_PATTERN.split(p.getUsername())) {
         Owner o = new Owner();
         o.setService(p.getService());
         o.setUsername(username);
         oList.put(o.getService() + "/" + o.getUsername(), o);
       }
     }
   }
   for (Override c : cList) {
     Map<String, String> params = StringUtils.parseQueryString(c.getParams());
     String usernames = params.get("owner");
     if (usernames != null && usernames.length() > 0) {
       for (String username : Constants.COMMA_SPLIT_PATTERN.split(usernames)) {
         Owner o = new Owner();
         o.setService(c.getService());
         o.setUsername(username);
         oList.put(o.getService() + "/" + o.getUsername(), o);
       }
     }
   }
   return new ArrayList<Owner>(oList.values());
 }
예제 #4
0
  public void updateProvider(Provider provider) {
    Long id = provider.getId();
    if (id == null) {
      throw new IllegalStateException("no provider id");
    }

    URL oldProvider = findProviderUrl(id);
    if (oldProvider == null) {
      throw new IllegalStateException("Provider was changed!");
    }
    URL newProvider = provider.toUrl();

    registryService.unregister(oldProvider);
    registryService.register(newProvider);
  }
예제 #5
0
 /**
  * load页面供新增操作
  *
  * @param context
  */
 public void add(Map<String, Object> context) {
   String service = (String) context.get("service");
   if (service != null && service.length() > 0 && !service.contains("*")) {
     List<Provider> providerList = providerService.findByService(service);
     List<String> addressList = new ArrayList<String>();
     for (Provider provider : providerList) {
       addressList.add(provider.getUrl().split("://")[1].split("/")[0]);
     }
     context.put("addressList", addressList);
     context.put("service", service);
     context.put("methods", CollectionUtils.sort(providerService.findMethodsByService(service)));
   } else {
     List<String> serviceList = Tool.sortSimpleName(providerService.findServices());
     context.put("serviceList", serviceList);
   }
   if (context.get("input") != null) context.put("input", context.get("input"));
 }
예제 #6
0
  public void disableProvider(Long id) {
    if (id == null) {
      throw new IllegalStateException("no provider id");
    }

    Provider oldProvider = findProvider(id);
    if (oldProvider == null) {
      throw new IllegalStateException("Provider was changed!");
    }

    if (oldProvider.isDynamic()) {
      // 保证disable的override唯一
      if (oldProvider.isEnabled()) {
        Override override = new Override();
        override.setAddress(oldProvider.getAddress());
        override.setService(oldProvider.getService());
        override.setEnabled(true);
        override.setParams(Constants.DISABLED_KEY + "=true");
        overrideService.saveOverride(override);
        return;
      }
      List<Override> oList =
          overrideService.findByServiceAndAddress(
              oldProvider.getService(), oldProvider.getAddress());

      for (Override o : oList) {
        Map<String, String> params = StringUtils.parseQueryString(o.getParams());
        if (params.containsKey(Constants.DISABLED_KEY)) {
          if (params.get(Constants.DISABLED_KEY).equals("false")) {
            overrideService.deleteOverride(o.getId());
          }
        }
      }
    } else {
      oldProvider.setEnabled(false);
      updateProvider(oldProvider);
    }
  }
예제 #7
0
 public void create(Provider provider) {
   URL url = provider.toUrl();
   registryService.register(url);
 }