RocketMQ-netty异步调用
2017-11-09 15:58:07 1 举报
RocketMQ远程Netty异步调用
作者其他创作
大纲/内容
调用者线程
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()
NettyClientHandler中的channelRead0被触发,执行processResponse,从发回的response中取出opaque,用该opaque为key从responseTable中获取到responseFuture,内部先把Server返回的数据放入responseFuture的responseCommand变量中,解除semaphore限流,异步调用InvokeCallback不再为null,开启新的线程直接调用executeInvokeCallback(responseFuture)产生回调效果。
Netty IO线程
NettyRemotingServer
在新的线程中执行回调
semaphore限流
writeAndFlush
请求处理线程
ctx.writeAndFlush(response)
0 条评论
下一页