@Override public void destroy() { if (isDestroyed()) { return; } super.destroy(); for (Invoker<T> invoker : invokers) { invoker.destroy(); } invokers.clear(); }
public void buildRouterChain() { RouterChain<T> routerChain = RouterChain.buildChain(getUrl()); routerChain.setInvokers(invokers); this.setRouterChain(routerChain); }
private List<Invoker<T>> toMergeInvokerList(List<Invoker<T>> invokers) { List<Invoker<T>> mergedInvokers = new ArrayList<>(); Map<String, List<Invoker<T>>> groupMap = new HashMap<String, List<Invoker<T>>>(); for (Invoker<T> invoker : invokers) { String group = invoker.getUrl().getParameter(Constants.GROUP_KEY, ""); groupMap.computeIfAbsent(group, k -> new ArrayList<>()); groupMap.get(group).add(invoker); } if (groupMap.size() == 1) { mergedInvokers.addAll(groupMap.values().iterator().next()); } else if (groupMap.size() > 1) { for (List<Invoker<T>> groupList : groupMap.values()) { StaticDirectory<T> staticDirectory = new StaticDirectory<>(groupList); staticDirectory.buildRouterChain(); mergedInvokers.add(cluster.join(staticDirectory)); } } else { mergedInvokers = invokers; } return mergedInvokers; }
@Override protected List<Invoker<T>> doList(Invocation invocation) throws RpcException { List<Invoker<T>> finalInvokers = invokers; if (routerChain != null) { try { finalInvokers = routerChain.route(getConsumerUrl(), invocation); } catch (Throwable t) { logger.error("Failed to execute router: " + getUrl() + ", cause: " + t.getMessage(), t); } } return finalInvokers == null ? Collections.emptyList() : finalInvokers; }
@Override public void destroy() { if (isDestroyed()) { return; } // unregister. try { if (getRegisteredConsumerUrl() != null && registry != null && registry.isAvailable()) { registry.unregister(getRegisteredConsumerUrl()); } } catch (Throwable t) { logger.warn("unexpected error when unregister service " + serviceKey + "from registry" + registry.getUrl(), t); } // unsubscribe. try { if (getConsumerUrl() != null && registry != null && registry.isAvailable()) { registry.unsubscribe(getConsumerUrl(), this); } DynamicConfiguration.getDynamicConfiguration() .removeListener(ApplicationModel.getApplication(), consumerConfigurationListener); } catch (Throwable t) { logger.warn("unexpected error when unsubscribe service " + serviceKey + "from registry" + registry.getUrl(), t); } super.destroy(); // must be executed after unsubscribing try { destroyAllInvokers(); } catch (Throwable t) { logger.warn("Failed to destroy service " + serviceKey, t); } }
invoker = cluster.join(new StaticDirectory(u, invokers)); } else { // not a registry url, must be direct invoke. invoker = cluster.join(new StaticDirectory(invokers));
@Override public boolean isAvailable() { if (isDestroyed()) { return false; } for (Invoker<T> invoker : invokers) { if (invoker.isAvailable()) { return true; } } return false; }
public AbstractDirectory(URL url, URL consumerUrl, RouterChain<T> routerChain) { if (url == null) { throw new IllegalArgumentException("url == null"); } if (url.getProtocol().equals(Constants.REGISTRY_PROTOCOL)) { Map<String, String> queryMap = StringUtils.parseQueryString(url.getParameterAndDecoded(Constants.REFER_KEY)); this.url = url.addParameters(queryMap).removeParameter(Constants.MONITOR_KEY); } else { this.url = url; } this.consumerUrl = consumerUrl; setRouterChain(routerChain); }
@Override public void destroy() { if (isDestroyed()) { return; } super.destroy(); for (Invoker<T> invoker : invokers) { invoker.destroy(); } invokers.clear(); }
private List<Invoker<T>> toMergeInvokerList(List<Invoker<T>> invokers) { List<Invoker<T>> mergedInvokers = new ArrayList<>(); Map<String, List<Invoker<T>>> groupMap = new HashMap<String, List<Invoker<T>>>(); for (Invoker<T> invoker : invokers) { String group = invoker.getUrl().getParameter(Constants.GROUP_KEY, ""); groupMap.computeIfAbsent(group, k -> new ArrayList<>()); groupMap.get(group).add(invoker); } if (groupMap.size() == 1) { mergedInvokers.addAll(groupMap.values().iterator().next()); } else if (groupMap.size() > 1) { for (List<Invoker<T>> groupList : groupMap.values()) { StaticDirectory<T> staticDirectory = new StaticDirectory<>(groupList); staticDirectory.buildRouterChain(); mergedInvokers.add(cluster.join(staticDirectory)); } } else { mergedInvokers = invokers; } return mergedInvokers; }
public void buildRouterChain() { RouterChain<T> routerChain = RouterChain.buildChain(getUrl()); routerChain.setInvokers(invokers); this.setRouterChain(routerChain); }
@Override protected List<Invoker<T>> doList(Invocation invocation) throws RpcException { List<Invoker<T>> finalInvokers = invokers; if (routerChain != null) { try { finalInvokers = routerChain.route(getConsumerUrl(), invocation); } catch (Throwable t) { logger.error("Failed to execute router: " + getUrl() + ", cause: " + t.getMessage(), t); } } return finalInvokers == null ? Collections.emptyList() : finalInvokers; }
@Override public void destroy() { if (isDestroyed()) { return; } // unregister. try { if (getRegisteredConsumerUrl() != null && registry != null && registry.isAvailable()) { registry.unregister(getRegisteredConsumerUrl()); } } catch (Throwable t) { logger.warn("unexpected error when unregister service " + serviceKey + "from registry" + registry.getUrl(), t); } // unsubscribe. try { if (getConsumerUrl() != null && registry != null && registry.isAvailable()) { registry.unsubscribe(getConsumerUrl(), this); } DynamicConfiguration.getDynamicConfiguration() .removeListener(ApplicationModel.getApplication(), consumerConfigurationListener); } catch (Throwable t) { logger.warn("unexpected error when unsubscribe service " + serviceKey + "from registry" + registry.getUrl(), t); } super.destroy(); // must be executed after unsubscribing try { destroyAllInvokers(); } catch (Throwable t) { logger.warn("Failed to destroy service " + serviceKey, t); } }
invoker = cluster.join(new StaticDirectory(u, invokers)); } else { // not a registry url, must be direct invoke. invoker = cluster.join(new StaticDirectory(invokers));
@Override public boolean isAvailable() { if (isDestroyed()) { return false; } for (Invoker<T> invoker : invokers) { if (invoker.isAvailable()) { return true; } } return false; }
public AbstractDirectory(URL url, URL consumerUrl, RouterChain<T> routerChain) { if (url == null) { throw new IllegalArgumentException("url == null"); } if (url.getProtocol().equals(Constants.REGISTRY_PROTOCOL)) { Map<String, String> queryMap = StringUtils.parseQueryString(url.getParameterAndDecoded(Constants.REFER_KEY)); this.url = url.addParameters(queryMap).removeParameter(Constants.MONITOR_KEY); } else { this.url = url; } this.consumerUrl = consumerUrl; setRouterChain(routerChain); }
@Override public void destroy() { if (isDestroyed()) { return; } super.destroy(); for (Invoker<T> invoker : invokers) { invoker.destroy(); } invokers.clear(); }
@Override public void destroy() { if (isDestroyed()) { return; } super.destroy(); for (Invoker<T> invoker : invokers) { invoker.destroy(); } invokers.clear(); }