当前位置: 首页>>代码示例>>Java>>正文


Java Invoker.isAvailable方法代码示例

本文整理汇总了Java中com.alibaba.dubbo.rpc.Invoker.isAvailable方法的典型用法代码示例。如果您正苦于以下问题:Java Invoker.isAvailable方法的具体用法?Java Invoker.isAvailable怎么用?Java Invoker.isAvailable使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在com.alibaba.dubbo.rpc.Invoker的用法示例。


在下文中一共展示了Invoker.isAvailable方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: isAvailable

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
public boolean isAvailable() {
    if (isDestroyed()) {
        return false;
    }
    for (Invoker<T> invoker : invokers) {
        if (invoker.isAvailable()) {
            return true;
        }
    }
    return false;
}
 
开发者ID:dachengxi,项目名称:EatDubbo,代码行数:12,代码来源:StaticDirectory.java

示例2: doInvoke

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
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);
}
 
开发者ID:dachengxi,项目名称:EatDubbo,代码行数:9,代码来源:AvailableClusterInvoker.java

示例3: join

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
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);
        }
    };
    
}
 
开发者ID:dachengxi,项目名称:EatDubbo,代码行数:15,代码来源:AvailableCluster.java

示例4: isAvailable

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
public boolean isAvailable() {
    Invoker<T> invoker = stickyInvoker;
    if (invoker != null) {
        return invoker.isAvailable();
    }
    return directory.isAvailable();
}
 
开发者ID:dachengxi,项目名称:EatDubbo,代码行数:8,代码来源:AbstractClusterInvoker.java

示例5: doselect

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
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;
}
 
开发者ID:dachengxi,项目名称:EatDubbo,代码行数:35,代码来源:AbstractClusterInvoker.java

示例6: testSelectBalance

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
/**
     * 测试均衡.
     */
    @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());
        ;

    }
 
开发者ID:l1325169021,项目名称:github-test,代码行数:32,代码来源:AbstractClusterInvokerTest.java

示例7: buildInvokerChain

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
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;
}
 
开发者ID:dachengxi,项目名称:EatDubbo,代码行数:39,代码来源:ProtocolFilterWrapper.java

示例8: testSelectBalance

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
/**
     * 测试均衡.
     */
    @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());;
        
    }
 
开发者ID:flychao88,项目名称:dubbocloud,代码行数:31,代码来源:AbstractClusterInvokerTest.java

示例9: doselect

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
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;
}
 
开发者ID:l1325169021,项目名称:github-test,代码行数:35,代码来源:AbstractClusterInvoker.java

示例10: isAvailable

import com.alibaba.dubbo.rpc.Invoker; //导入方法依赖的package包/类
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;
}
 
开发者ID:flychao88,项目名称:dubbocloud,代码行数:15,代码来源:RegistryDirectory.java


注:本文中的com.alibaba.dubbo.rpc.Invoker.isAvailable方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。