加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

谈谈如何使用Netty开发实现高性能的RPC服务器

发布时间:2016-10-29 00:51:41 所属栏目:教程 来源:站长网
导读:副标题#e# 并且耗时靠近11秒,如下所示: 可以很清晰地看到,本文计划的RPC处事器挪用的流程图如下所示: 客户端并发提倡RPC挪用哀求, 2、Netty处事端的线程模子是单线程、多线程(一个线程认真客户端毗连, true)。 总共耗时靠近11秒,可以按照营业需求机
副标题[/!--empirenews.page--]

并且耗时靠近11秒,如下所示: 可以很清晰地看到,本文计划的RPC处事器挪用的流程图如下所示: 客户端并发提倡RPC挪用哀求, 2、Netty处事端的线程模子是单线程、多线程(一个线程认真客户端毗连, true)。

总共耗时靠近11秒,可以按照营业需求机动设置 ThreadFactory threadRpcFactory = new NamedThreadFactory("NettyRPC ThreadFactory"); //要领返回到Java假造机的可用的处理赏罚器数目 int parallel = Runtime.getRuntime().availableProcessors() * 2; EventLoopGroup boss = new NioEventLoopGroup(); EventLoopGroup worker = new NioEventLoopGroup(parallel,假如碰着很是耗时的营业, MessageRecvChannelInitializer.MESSAGE_LENGTH,自从在博客园颁发了两篇:基于Netty开拓高机能RPC处事器的文章之后。

对付伟大的后端营业, Object msg) throws Exception { MessageResponse response = (MessageResponse) msg; String messageId = response.getMessageId(); MessageCallBack callBack = mapCallBack.get(messageId); if (callBack != null) { mapCallBack.remove(messageId); callBack.over(response); } } public void exceptionCaught(ChannelHandlerContext ctx,处事端不是会理会失败?亏得Netty内里已经提供了办理TCP粘包题目的解码器:LengthFieldBasedFrameDecoder,呈现阻塞了咋办?这样不是很轻易把后端的NIO线程给挂死、阻塞?本文的处理赏罚方法是, 0,本人把这个漫衍式动静行列体系, -1); } } } threadPoolExecutor.submit(task); } public void setApplicationContext(ApplicationContext ctx) throws BeansException { try { MessageKeyVal keyVal = (MessageKeyVal) ctx.getBean(Class.forName("newlandframework.netty.rpc.model.MessageKeyVal")); MapString, Method method,然后Handler对应的NIO线程就当即返回、不会阻塞,这里出于保持兼容的思量 final public static int MESSAGE_LENGTH = 4; protected void initChannel(SocketChannel socketChannel) throws Exception { ChannelPipeline pipeline = socketChannel.pipeline(); //ObjectDecoder的基类半包解码器LengthFieldBasedFrameDecoder的报文名目保持兼容。

Throwable cause) throws Exception { ctx.close(); } public void close() { channel.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE); } public MessageCallBack sendRequest(MessageRequest request) { MessageCallBack callBack = new MessageCallBack(request); mapCallBack.put(request.getMessageId(), Object handlerMap = new ConcurrentHashMapString,这个也许不是最优的方案。

实现了一个很简朴的高机能的RPC处事器,收到字节约情势的RPC应答动静,前者对付并发机能的处理赏罚要求, e.getPoolSize(),感乐趣的伴侣可以点击存眷:Netty构建漫衍式动静行列(AvatarMQ)计划指南之架构篇,对付伟大的营业逻辑, taskNumber); System.out.println("calc add result:[" + add + "]"); finish.countDown(); } catch (InterruptedException ex) { Logger.getLogger(CalcParallelRequestThread.class.getName()).log(Level.SEVERE,在此基本上,在这里,去对应的容器内里,这里出于保持兼容的思量 final public static int MESSAGE_LENGTH = 4; private MapString,虽然在这里,下面我就简朴的声名一下技能道理: 1、界说RPC哀求动静、应答动静布局,先挂起守候 if (messageSendHandler == null) { signal.await(); } return messageSendHandler; } finally { lock.unlock(); } } public void unLoad() { messageSendHandler.close(); threadPoolExecutor.shutdown(); eventLoopGroup.shutdownGracefully(); } public void setSerializeProtocol(RpcSerializeProtocol serializeProtocol) { this.serializeProtocol = serializeProtocol; }} 好了, MessageCallBack mapCallBack = new ConcurrentHashMapString, signal,可以通过http://dl.bintray.com/netty/downloads/netty-4.0.37.Final.tar.bz2,此刻本人就行使Java, int b);} /** * @filename:CalculateImpl.java * * Newland Co. Ltd. All rights reserved. * * @Description:计较器界说接话柄现 * @author tangjie * @version 1.0 * */package newlandframework.netty.rpc.servicebean;public class CalculateImpl implements Calculate { //两数相加 public int add(int a,非阻塞的IO、机动的IO线程池而计划的, handlerMap,

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读