Java Code Examples for com.alibaba.dubbo.rpc.Invoker#isAvailable()
The following examples show how to use
com.alibaba.dubbo.rpc.Invoker#isAvailable() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: AbstractClusterInvoker.java From dubbox with Apache License 2.0 | 5 votes |
public boolean isAvailable() { Invoker<T> invoker = stickyInvoker; if (invoker != null) { return invoker.isAvailable(); } return directory.isAvailable(); }
Example 2
Source File: RegistryDirectory.java From dubbox with Apache License 2.0 | 5 votes |
public boolean isAvailable() { if (isDestroyed()) { return false; } Map<String, Invoker<T>> localUrlInvokerMap = urlInvokerMap; if (localUrlInvokerMap != null && localUrlInvokerMap.size() > 0) { for (Invoker<T> invoker : new ArrayList<Invoker<T>>(localUrlInvokerMap.values())) { if (invoker.isAvailable()) { return true; } } } return false; }
Example 3
Source File: AvailableCluster.java From dubbox with Apache License 2.0 | 5 votes |
public <T> Invoker<T> join(Directory<T> directory) throws RpcException { return new AbstractClusterInvoker<T>(directory) { public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException { for (Invoker<T> invoker : invokers) { if (invoker.isAvailable()) { return invoker.invoke(invocation); } } throw new RpcException("No provider available in " + invokers); } }; }
Example 4
Source File: AvailableCluster.java From dubbox-hystrix with Apache License 2.0 | 5 votes |
public <T> Invoker<T> join(Directory<T> directory) throws RpcException { return new AbstractClusterInvoker<T>(directory) { public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException { for (Invoker<T> invoker : invokers) { if (invoker.isAvailable()) { return invoker.invoke(invocation); } } throw new RpcException("No provider available in " + invokers); } }; }
Example 5
Source File: StaticDirectory.java From dubbox with Apache License 2.0 | 5 votes |
public boolean isAvailable() { if (isDestroyed()) { return false; } for (Invoker<T> invoker : invokers) { if (invoker.isAvailable()) { return true; } } return false; }
Example 6
Source File: StaticDirectory.java From dubbox-hystrix with Apache License 2.0 | 5 votes |
public boolean isAvailable() { if (isDestroyed()) { return false; } for (Invoker<T> invoker : invokers) { if (invoker.isAvailable()) { return true; } } return false; }
Example 7
Source File: ProtocolFilterWrapper.java From dubbo3 with Apache License 2.0 | 5 votes |
private static <T> Invoker<T> buildInvokerChain(final Invoker<T> invoker, String key, String group) { Invoker<T> last = invoker; List<Filter> filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group); if (filters.size() > 0) { for (int i = filters.size() - 1; i >= 0; i --) { final Filter filter = filters.get(i); final Invoker<T> next = last; last = new Invoker<T>() { public Class<T> getInterface() { return invoker.getInterface(); } public URL getUrl() { return invoker.getUrl(); } public boolean isAvailable() { return invoker.isAvailable(); } public Result invoke(Invocation invocation) throws RpcException { return filter.invoke(next, invocation); } public void destroy() { invoker.destroy(); } @Override public String toString() { return invoker.toString(); } }; } } return last; }
Example 8
Source File: ProtocolFilterWrapper.java From dubbox with Apache License 2.0 | 5 votes |
private static <T> Invoker<T> buildInvokerChain(final Invoker<T> invoker, String key, String group) { Invoker<T> last = invoker; List<Filter> filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group); if (filters.size() > 0) { for (int i = filters.size() - 1; i >= 0; i --) { final Filter filter = filters.get(i); final Invoker<T> next = last; last = new Invoker<T>() { public Class<T> getInterface() { return invoker.getInterface(); } public URL getUrl() { return invoker.getUrl(); } public boolean isAvailable() { return invoker.isAvailable(); } public Result invoke(Invocation invocation) throws RpcException { return filter.invoke(next, invocation); } public void destroy() { invoker.destroy(); } @Override public String toString() { return invoker.toString(); } }; } } return last; }
Example 9
Source File: AbstractClusterInvokerTest.java From dubbox with Apache License 2.0 | 5 votes |
/** * 测试均衡. */ @Test public void testSelectBalance(){ LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME); initlistsize5(); Map<Invoker,AtomicLong> counter = new ConcurrentHashMap<Invoker,AtomicLong>(); for(Invoker invoker :invokers){ counter.put(invoker, new AtomicLong(0)); } int runs = 1000; for(int i=0;i<runs;i++){ selectedInvokers.clear(); Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers); counter.get(sinvoker).incrementAndGet(); } for (Invoker minvoker :counter.keySet() ){ Long count = counter.get(minvoker).get(); // System.out.println(count); if(minvoker.isAvailable()) Assert.assertTrue("count should > avg", count>runs/invokers.size()); } Assert.assertEquals(runs, counter.get(invoker2).get()+counter.get(invoker4).get());; }
Example 10
Source File: ProtocolFilterWrapper.java From dubbox-hystrix with Apache License 2.0 | 5 votes |
private static <T> Invoker<T> buildInvokerChain(final Invoker<T> invoker, String key, String group) { Invoker<T> last = invoker; List<Filter> filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group); if (filters.size() > 0) { for (int i = filters.size() - 1; i >= 0; i --) { final Filter filter = filters.get(i); final Invoker<T> next = last; last = new Invoker<T>() { public Class<T> getInterface() { return invoker.getInterface(); } public URL getUrl() { return invoker.getUrl(); } public boolean isAvailable() { return invoker.isAvailable(); } public Result invoke(Invocation invocation) throws RpcException { return filter.invoke(next, invocation); } public void destroy() { invoker.destroy(); } @Override public String toString() { return invoker.toString(); } }; } } return last; }
Example 11
Source File: AvailableCluster.java From dubbo3 with Apache License 2.0 | 5 votes |
public <T> Invoker<T> join(Directory<T> directory) throws RpcException { return new AbstractClusterInvoker<T>(directory) { public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException { for (Invoker<T> invoker : invokers) { if (invoker.isAvailable()) { return invoker.invoke(invocation); } } throw new RpcException("No provider available in " + invokers); } }; }
Example 12
Source File: AbstractClusterInvoker.java From dubbox with Apache License 2.0 | 5 votes |
private Invoker<T> doselect(LoadBalance loadbalance, Invocation invocation, List<Invoker<T>> invokers, List<Invoker<T>> selected) throws RpcException { if (invokers == null || invokers.size() == 0) return null; if (invokers.size() == 1) return invokers.get(0); // 如果只有两个invoker,退化成轮循 if (invokers.size() == 2 && selected != null && selected.size() > 0) { return selected.get(0) == invokers.get(0) ? invokers.get(1) : invokers.get(0); } Invoker<T> invoker = loadbalance.select(invokers, getUrl(), invocation); //如果 selected中包含(优先判断) 或者 不可用&&availablecheck=true 则重试. if( (selected != null && selected.contains(invoker)) ||(!invoker.isAvailable() && getUrl()!=null && availablecheck)){ try{ Invoker<T> rinvoker = reselect(loadbalance, invocation, invokers, selected, availablecheck); if(rinvoker != null){ invoker = rinvoker; }else{ //看下第一次选的位置,如果不是最后,选+1位置. int index = invokers.indexOf(invoker); try{ //最后在避免碰撞 invoker = index <invokers.size()-1?invokers.get(index+1) :invoker; }catch (Exception e) { logger.warn(e.getMessage()+" may because invokers list dynamic change, ignore.",e); } } }catch (Throwable t){ logger.error("clustor relselect fail reason is :"+t.getMessage() +" if can not slove ,you can set cluster.availablecheck=false in url",t); } } return invoker; }
Example 13
Source File: AvailableClusterInvoker.java From dubbox with Apache License 2.0 | 5 votes |
public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException { for (Invoker<T> invoker : invokers) { if (invoker.isAvailable()) { return invoker.invoke(invocation); } } throw new RpcException("No provider available in " + invokers); }
Example 14
Source File: AbstractClusterInvokerTest.java From dubbox with Apache License 2.0 | 5 votes |
/** * 测试均衡. */ @Test public void testSelectBalance(){ LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME); initlistsize5(); Map<Invoker,AtomicLong> counter = new ConcurrentHashMap<Invoker,AtomicLong>(); for(Invoker invoker :invokers){ counter.put(invoker, new AtomicLong(0)); } int runs = 1000; for(int i=0;i<runs;i++){ selectedInvokers.clear(); Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers); counter.get(sinvoker).incrementAndGet(); } for (Invoker minvoker :counter.keySet() ){ Long count = counter.get(minvoker).get(); // System.out.println(count); if(minvoker.isAvailable()) Assert.assertTrue("count should > avg", count>runs/invokers.size()); } Assert.assertEquals(runs, counter.get(invoker2).get()+counter.get(invoker4).get());; }
Example 15
Source File: StaticDirectory.java From dubbo3 with Apache License 2.0 | 5 votes |
public boolean isAvailable() { if (isDestroyed()) { return false; } for (Invoker<T> invoker : invokers) { if (invoker.isAvailable()) { return true; } } return false; }
Example 16
Source File: AbstractClusterInvokerTest.java From dubbo-2.6.5 with Apache License 2.0 | 5 votes |
/** * Test balance. */ @Test public void testSelectBalance() { LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME); initlistsize5(); Map<Invoker, AtomicLong> counter = new ConcurrentHashMap<Invoker, AtomicLong>(); for (Invoker invoker : invokers) { counter.put(invoker, new AtomicLong(0)); } int runs = 1000; for (int i = 0; i < runs; i++) { selectedInvokers.clear(); Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers); counter.get(sinvoker).incrementAndGet(); } for (Invoker minvoker : counter.keySet()) { Long count = counter.get(minvoker).get(); // System.out.println(count); if (minvoker.isAvailable()) Assert.assertTrue("count should > avg", count > runs / invokers.size()); } Assert.assertEquals(runs, counter.get(invoker2).get() + counter.get(invoker4).get()); ; }
Example 17
Source File: AbstractClusterInvoker.java From dubbo-2.6.5 with Apache License 2.0 | 5 votes |
private Invoker<T> doSelect(LoadBalance loadbalance, Invocation invocation, List<Invoker<T>> invokers, List<Invoker<T>> selected) throws RpcException { if (invokers == null || invokers.isEmpty()) return null; if (invokers.size() == 1) return invokers.get(0); if (loadbalance == null) { // 默认负载均衡策略 random loadbalance = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(Constants.DEFAULT_LOADBALANCE); } Invoker<T> invoker = loadbalance.select(invokers, getUrl(), invocation); //If the `invoker` is in the `selected` or invoker is unavailable && availablecheck is true, reselect. if ((selected != null && selected.contains(invoker)) || (!invoker.isAvailable() && getUrl() != null && availablecheck)) { try { // 如果选择的执行器不可用,重新选择=》 Invoker<T> rinvoker = reselect(loadbalance, invocation, invokers, selected, availablecheck); if (rinvoker != null) { invoker = rinvoker; } else { //Check the index of current selected invoker, if it's not the last one, choose the one at index+1. 检查当前选定调用程序的索引,如果不是最后一个,则选择index+1处的索引。 int index = invokers.indexOf(invoker); try { //Avoid collision invoker = index < invokers.size() - 1 ? invokers.get(index + 1) : invokers.get(0); } catch (Exception e) { logger.warn(e.getMessage() + " may because invokers list dynamic change, ignore.", e); } } } catch (Throwable t) { logger.error("cluster reselect fail reason is :" + t.getMessage() + " if can not solve, you can set cluster.availablecheck=false in url", t); } } return invoker; }
Example 18
Source File: AbstractClusterInvoker.java From dubbo-2.6.5 with Apache License 2.0 | 5 votes |
@Override public boolean isAvailable() { Invoker<T> invoker = stickyInvoker; if (invoker != null) { return invoker.isAvailable(); } return directory.isAvailable(); }
Example 19
Source File: AbstractClusterInvoker.java From dubbox with Apache License 2.0 | 5 votes |
private Invoker<T> doselect(LoadBalance loadbalance, Invocation invocation, List<Invoker<T>> invokers, List<Invoker<T>> selected) throws RpcException { if (invokers == null || invokers.size() == 0) return null; if (invokers.size() == 1) return invokers.get(0); // 如果只有两个invoker,退化成轮循 if (invokers.size() == 2 && selected != null && selected.size() > 0) { return selected.get(0) == invokers.get(0) ? invokers.get(1) : invokers.get(0); } Invoker<T> invoker = loadbalance.select(invokers, getUrl(), invocation); //如果 selected中包含(优先判断) 或者 不可用&&availablecheck=true 则重试. if( (selected != null && selected.contains(invoker)) ||(!invoker.isAvailable() && getUrl()!=null && availablecheck)){ try{ Invoker<T> rinvoker = reselect(loadbalance, invocation, invokers, selected, availablecheck); if(rinvoker != null){ invoker = rinvoker; }else{ //看下第一次选的位置,如果不是最后,选+1位置. int index = invokers.indexOf(invoker); try{ //最后在避免碰撞 invoker = index <invokers.size()-1?invokers.get(index+1) :invoker; }catch (Exception e) { logger.warn(e.getMessage()+" may because invokers list dynamic change, ignore.",e); } } }catch (Throwable t){ logger.error("clustor relselect fail reason is :"+t.getMessage() +" if can not slove ,you can set cluster.availablecheck=false in url",t); } } return invoker; }
Example 20
Source File: AbstractClusterInvokerTest.java From dubbo3 with Apache License 2.0 | 5 votes |
/** * 测试均衡. */ @Test public void testSelectBalance(){ LoadBalance lb = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(RoundRobinLoadBalance.NAME); initlistsize5(); Map<Invoker,AtomicLong> counter = new ConcurrentHashMap<Invoker,AtomicLong>(); for(Invoker invoker :invokers){ counter.put(invoker, new AtomicLong(0)); } int runs = 1000; for(int i=0;i<runs;i++){ selectedInvokers.clear(); Invoker sinvoker = cluster.select(lb, invocation, invokers, selectedInvokers); counter.get(sinvoker).incrementAndGet(); } for (Invoker minvoker :counter.keySet() ){ Long count = counter.get(minvoker).get(); // System.out.println(count); if(minvoker.isAvailable()) Assert.assertTrue("count should > avg", count>runs/invokers.size()); } Assert.assertEquals(runs, counter.get(invoker2).get()+counter.get(invoker4).get());; }