怎么用Springboot和Netty实现rpc
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"怎么用Springboot和Netty实现rpc",在日常操作中,相信很多人在怎么用Springboot和Netty实现rpc问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2026年11月03日怎么用Springboot和Netty实现rpc
这篇文章主要介绍"怎么用Springboot和Netty实现rpc",在日常操作中,相信很多人在怎么用Springboot和Netty实现rpc问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Springboot和Netty实现rpc"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
Springboot、 Netty、动态代理(反射)、反射
项目整体结构如下:

1.在父项目中引入相关依赖;
org.springframework.boot spring-boot-starter-web 2.3.2.RELEASE io.netty netty-all 4.1.48.Final com.alibaba fastjson 1.2.58 org.slf4j slf4j-log4j12 2.0.0-alpha1
2.服务提供模块整体结构如下:
这里重点关注一下 RequestModel 和 ResponseModel 两个消息体类,
@Data@AllArgsConstructorpublic class RequestModel { private String requestId; private String serviceName; private String methodName; private Class[] paramTypes; private Object[] paramValues; }@Data@AllArgsConstructorpublic class ResponseModel { private String responseId; private String serviceName; private String methodName; private String code; private String data;}用于服务端和客户端的数据传输;再者就是关注 ServerChannelInboundHandler 中的 channelRead0() 报文解码处理;
@Override protected void channelRead0(ChannelHandlerContext ctx, String msg) { StringBuilder sb = null; RequestModel result = null; try { // 报文解析处理 sb = new StringBuilder(); result = JSON.parseObject(msg, RequestModel.class); requestId = result.getRequestId(); String serviceName = result.getServiceName(); String methodName = result.getMethodName(); Class[] paramType = result.getParamTypes(); Object[] paramValue = result.getParamValues(); System.out.println(serviceName + " " + methodName); String substring = serviceName.substring(serviceName.lastIndexOf(".") + 1); String s = substring.substring(0, 1).toLowerCase() + substring.substring(1); Object serviceObject = applicationContext.getBean(s); Method method = Class.forName(serviceName).getMethod(methodName, paramType); Object returnValue = method.invoke(serviceObject, paramValue); ResponseModel responseModel = new ResponseModel(requestId,serviceName,methodName,"200",JSON.toJSONString(returnValue)); sb.append(JSON.toJSONString(responseModel)); sb.append("\n"); System.out.println(sb.toString()); ctx.writeAndFlush(sb); } catch (Exception e) { ResponseModel responseModel = new ResponseModel(requestId,"","","500",e.getMessage()); String errorCode = JSON.toJSONString(responseModel)+"\n"; log.error(errorCode); ctx.writeAndFlush(errorCode); log.error("报文解析失败: " + e.getMessage()); } }客户端的模块代码如下;
这里重点关注的是 ClientHandler 类中 channelRead0() 方法的处理
@Override protected void channelRead0(ChannelHandlerContext ctx, String msg) { System.out.println("收到服务端消息: " + msg); ResponseModel responseModel = JSON.parseObject(msg,ResponseModel.class); String responseId = responseModel.getResponseId(); Promise promise = LocalPromise.promiseMap.remove(responseId); if(promise != null){ String code = responseModel.getCode(); if(code.equals("200")){ promise.setSuccess(responseModel.getData()); }else{ promise.setFailure(new RuntimeException(responseModel.getData())); } } }和 AppStart 类中获取获取服务的处理;
privateT getProxyService(Class serviceClass) { Object service = Proxy.newProxyInstance(serviceClass.getClassLoader(), new Class[]{serviceClass}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Channel channel = NettyClient.getChannel(host, port); RequestModel requestModel = new RequestModel("100001", method.getDeclaringClass().getName(), method.getName(), method.getParameterTypes(), args); channel.writeAndFlush(JSON.toJSONString(requestModel) + "\n"); Promise promise = new DefaultPromise(channel.eventLoop()); LocalPromise.promiseMap.put(requestModel.getRequestId(), promise); System.out.println(LocalPromise.promiseMap+">>>>>>>>>>>>"); promise.await(); if (promise.isSuccess()) { Class> returnType = method.getReturnType(); return JSON.toJavaObject(JSON.parseObject(promise.getNow()+""),returnType); } else { System.out.println(promise.cause()); return promise.cause(); } } }); return (T) service; }
测试结果:
到此,关于"怎么用Springboot和Netty实现rpc"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
处理
学习
服务
报文
客户
整体
方法
更多
模块
消息
端的
结构
重点
项目
反射
帮助
实用
接下来
两个
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技赋能下的互联网金融
互联网科技开发公司
互联网金融 金融科技
中国 科技 互联网
为想互联网科技
互联网科技视频
四个字互联网科技公司取名
中正互联网科技招聘
农村开互联网科技讲堂
宁波青枫互联网科技有限公司
顶级互联网科技成果有哪些
互联网公司科技股
中国互联网十大科技股排名
科技互联网的核心竞争力
互联网科技机房
互联网科技的前景
山东蛋芒互联网科技有限公司
科技互联网专业务虚会材料
科技发展第三阶段互联网时代
广州全民伙伴互联网科技有限公司
精品咖啡豆
朗新科技与工业互联网
中资互联网科技
广州互联网科技公司
上海挚品互联网科技
亳州好赞互联网科技有限公司
深圳市罗太互联网科技有限公司
2021世界互联网领先科技成果发布
珠海东科互联网科技有限公司
伍佰万互联网科技是干嘛的