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


Java ChannelFuture.syncUninterruptibly方法代码示例

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


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

示例1: call

import io.netty.channel.ChannelFuture; //导入方法依赖的package包/类
@Override
public RpcResponse call() throws Exception {
    //初始化返回结果容器,将本次调用的唯一标识作为Key存入返回结果的Map
    RevokerResponseHolder.initResponseData(request.getUniqueKey());
    //根据本地调用服务提供者地址获取对应的Netty通道channel队列
    ArrayBlockingQueue<Channel> blockingQueue = NettyChannelPoolFactory.channelPoolFactoryInstance().acquire(inetSocketAddress);
    try {
        if (channel == null) {
            //从队列中获取本次调用的Netty通道channel
            channel = blockingQueue.poll(request.getInvokeTimeout(), TimeUnit.MILLISECONDS);
        }

        //若获取的channel通道已经不可用,则重新获取一个
        while (!channel.isOpen() || !channel.isActive() || !channel.isWritable()) {
            logger.warn("----------retry get new Channel------------");
            channel = blockingQueue.poll(request.getInvokeTimeout(), TimeUnit.MILLISECONDS);
            if (channel == null) {
                //若队列中没有可用的Channel,则重新注册一个Channel
                channel = NettyChannelPoolFactory.channelPoolFactoryInstance().registerChannel(inetSocketAddress);
            }
        }

        //将本次调用的信息写入Netty通道,发起异步调用
        ChannelFuture channelFuture = channel.writeAndFlush(request);
        channelFuture.syncUninterruptibly();

        //从返回结果容器中获取返回结果,同时设置等待超时时间为invokeTimeout
        long invokeTimeout = request.getInvokeTimeout();
        return RevokerResponseHolder.getValue(request.getUniqueKey(), invokeTimeout);
    } catch (Exception e) {
        logger.error("service invoke error.", e);
    } finally {
        //本次调用完毕后,将Netty的通道channel重新释放到队列中,以便下次调用复用
        NettyChannelPoolFactory.channelPoolFactoryInstance().release(blockingQueue, channel, inetSocketAddress);
    }
    return null;
}
 
开发者ID:linuer,项目名称:nan,代码行数:38,代码来源:RevokerServiceCallable.java


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