如果业务的ChannelHandler接收不到消息,可能有如下原因: 业务的解码ChannelHandler存在BUG,导致消息解码失败,没有投递到后端。 业务发送的是畸形或者错误码流(例如长度错误),导致业务解码ChannelHandler无法正确解码出业务消息。 业务ChannelHandler执行了一些耗时或者阻塞操作,导致Netty的NioEventLoop被挂住,无法读取消息。 执行业务ChannelHandler的线程池队列积压,导致新接收的消息在排队,没有得到及时处理。 对方确实没有发送消息。 定位策略如下: 在业务的首个ChannelHandler的channelRead方法中打断点调试,看是否读取到消息。 在ChannelHandler中添加LoggingHandler,打印接口日志。 查看NioEventLoop线程状态,看是否发生了阻塞。 通过tcpdump抓包看消息是否发送成功。 |
|