手写 RPC | 记一次未 implement Serializable 导致的卡死
消息对象未实现 Serializable
问题描述
基于 Netty 实现通信,在 Client 和 Server 侧分别创建了 NettyInitializer,并在流水线中添加 ObjectEncoder
/ ObjectDecoder
。客户端发信后无响应。
排查
能够确认客户端与服务端已连接,且 Server 侧的 NettyInitializer 正常初始化。此后无响应。检查代码发现消息对象忘记实现 Serializable,修改后重启通信正常。
Netty 的 ObjectEncoder/ObjectDecoder 基于 Java 原生序列化机制进行编解码,只支持对实现了 java.io.Serializable 的对象进行处理。
总结
排查重心放在 Server 侧一无所获。最后是消息类的问题,Netty 无法正常序列化。