基于netty的 简单 rpc 框架
所属分类 netty
浏览量 1079
基于netty
不依赖spring
序列化采用json
暂未实现注册中心
ServerHandler 注意加上 @Sharable
否则多个客户端连接时会报错
io.netty.channel.ChannelPipelineException: dyyx.simplerpc.ServerHandler is not a @Sharable handler, so can't be added or removed multiple times.
打成 fat jar
mvn package -f pom-jar.xml
java -cp .:simplerpc.jar dyyx.simplerpc.NettyServerMain
java -cp .:simplerpc.jar dyyx.simplerpc.NettyClientMain
java -cp .:simplerpc.jar -Dport=7777 dyyx.simplerpc.NettyServerMain
java -cp .:simplerpc.jar -Dip=127.0.0.1 -Dport=7777 dyyx.simplerpc.NettyClientMain
客户端异步转同步 DefaultFuture
ClientHandler
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof RpcResponse) {
RpcResponse response = (RpcResponse) msg;
DefaultFuture defaultFuture = futureMap.get(response.getRequestId());
defaultFuture.setResponse(response);
}
super.channelRead(ctx, msg);
}
public RpcResponse getRpcResponse(String requestId) throws InterruptedException {
try {
DefaultFuture future = futureMap.get(requestId);
return future.getRpcResponse(10);
} finally {
futureMap.remove(requestId);
}
}
NettyClient
public RpcResponse send(final RpcRequest request) throws InterruptedException {
channel.writeAndFlush(request).await();
return clientHandler.getRpcResponse(request.getRequestId());
}
完整代码
https://gitee.com/dyyx/demos/tree/master/simplerpc
maven-assembly-plugin 和 maven-shade-plugin
上一篇
下一篇
Dubbo中的netty使用
中年男人的西游记
dubbo XML Schema 扩展机制
dubbo 几个实用功能
Dubbo路由简介
geohash简介