RocketMQ-netty同步调用
2017-12-28 14:42:34 0 举报
RocketMQ远程Netty同步调用
作者其他创作
大纲/内容
waiting ...调用者线程等待结果中
调用者线程
线程被唤醒,返回responseCommand,调用结束
NettyServerHandler中的channelRead0被触发,执行processRequest,获取到Client的数据,将数据的执行给Server的请求处理线程
唤醒
处理数据,发送response结果,request中的那个opaque的值不变,原封不动发送给Client
channel.writeAndFlush(request);channelFuture.addListener();用Netty的channal将request数据发送去Server。Netty异步发送数据是异步的,监听opertionComplete事件
int opaque = request.getOpaque();获取request的唯一自增标识:opaque
ResponseFuture responseFuture = new ResponseFuture()创建异步调用结果:responseFuture
NettyRemotingClient
operationComplete发送成功,由Netty调用ChannelFutureListener的operationComplete方法
Netty IO线程
NettyRemotingServer
触发
responseFuture.waitResponse(timeout);Client端线程进行等待,内部使用的是countDownLatch.await()
writeAndFlush
请求处理线程
ctx.writeAndFlush(response)
0 条评论
下一页