rpc服务端
2024-03-03 13:16:55 2 举报
RPC服务端是一个通过网络从远程计算机程序上请求服务的应用程序,无需了解底层网络技术的细节。它负责处理客户端的请求并返回结果。在RPC架构中,客户端应用程序通过网络向服务端发送一个带有参数信息的请求消息,服务端接收到消息后进行相应的处理,并将结果返回给客户端。这种机制使得开发者能够更容易地构建分布式系统和应用程序,因为客户端和服务端之间可以使用不同的编程语言和平台进行开发。同时,RPC服务端也可以提供负载均衡、安全认证等功能,以增强系统的可用性和安全性。总之,RPC服务端是一个强大而灵活的工具,可以帮助开发者更快地构建高质量的分布式应用程序。
作者其他创作
大纲/内容
将返回对象封装到JsonRpcReturnVo中,将请求中的serialNum返回回去
IdleStateHandler用于空闲检测,并触发空闲事件,服务端只设置读空闲事件;IdleEventHandler用于空闲事件回调,收到读空闲事件时则关闭客户端连接
需要暴露为rpc服务的bean上添加@RpcService注解,在spring容器启动完成后,回调CommandLineRunner.run方法,获取全部带有@RpcService注解的bean,放入map缓存中
自动配置流程
业务处理GenericMessageHandler
自动配置类RpcServerAutoConfiguration
在RpcServer.afterPropertiesSet()方法中启动netty服务
rpc请求返回
加上注解@ConfigurationProperties(\"rpc.server\")
new String(bytes[])
将接收到的ByteBuf(int+byte[]),去除int,读取剩余bytes[],然后再String json = new String(bytes[]),将json传递给后面handler
json字符串解析为JsonRpcVo对象,字段定义如右图
进入json处理流程
将JsonRpcReturnVo对象序列化为json,并转为byte[],前面加上byte[].length,作为一个协议包返回给rpc客户端
加上注解@EnableConfigurationProperties(RpcServerProperties.class)作用是将如上属性RpcServerProperties类注册为bean
通过serviceBeanMap缓存加速获取bean对象,通过serviceBeanClassMap缓存加速获取beanClass对象
ByteBuf(int+byte[])
协议包解析MessageToMessageDecoder
netty服务启动流程
rpc服务端完成
netty服务启动成功后,即NioServerSocketChannel成功变为监听状态,将ip+port注册到nacos中的namespace+group+service-name下,配置文件如右图所示
此处使用LengthFieldBasedFrameDecoder,基于长度字段的解码器,用于解决拆包/粘包问题。此处设置前4字节为长度字段,后面全为json内容
启动主类RpcServerApplication
在配置类中@Bean方式创建RpcServer bean
启动类引入自动配置
使用FastClass反射调用方法
属性类RpcServerProperties
RpcServer实现InitializingBean,初始化方法中新建线程,启动netty服务
阻塞等待channel关闭future.channel().closeFuture().sync();
加上注解@EnableRpcServer作用是引入自动配置类。此时,其他bean中就可以将RpcServerProperties作为bean注入了
心跳检测IdleStateHandler、ServerIdleEventHandler
CommandLineRunner中初始化全局缓存JsonRpc.serviceBeanMap和JsonRpc.serviceBeanClassMap
rpc服务端启动
serviceBeanMap缓存初始化
协议包截取ByteToMessageDecoder
rpc客户端请求到来
spring-boot自动配置开发
加上注解@Import({RpcServerAutoConfiguration.class})作用是引入自动配置类
添加childHandler
使用 CGLib 执行反射调用,性能优于jdk反射调用,和普通方法调用方式性能相似,没有很多的前置检查
JsonRpcVo对象转为JsonRpc对象,包含实际bean对象
将ip+port注册到nacos
@EnableRpcServer注解引入自动配置
0 条评论
下一页