默认netty udp接收DatagramPacket字节数最大是2048,如果数据大,超过这个限制,就会报错,抛出异常,虽然这个包解析失败,不会影响其他包的解析,但是总得来说,这种失败是不利于数据收集的。
我们先来看看这个错误:
java.lang.IndexOutOfBoundsException: readerIndex(57) + length(2503) exceeds writerIndex(2048): PooledUnsafeDirectByteBuf(ridx: 57, widx: 2048, cap: 2048)
报错代码出自AbstractByteBuf.java的checkReadableBytes0()这个方法:
通过调试,我们可以看到(DatagramPacket msg) 默认writerIndex=2048:
报错的原因就是读取的数据索引readerIndex超过writerIndex,解决办法就是在udp服务创建的时候,指定RCVBUF_ALLOCATOR,如下所示:
EventLoopGroup group = new NioEventLoopGroup(threadNum);
t