关于Netty中的消息积压

场景一:高并发场景下,服务端处理过慢会导致客户端消息积压.

解决方案,除了服务端做流控,客户端也需要做并发保护,防止自身发生消息积压

Netty也提供了高低水位机制

当发送队列待发送的字节数组达到高水位时,对应的Channel就变为不可写状态。
通过对Channel的可写状态进行判断来决定是否发送消息

设置高水位

ctx.channel().config().setWriteBufferHighWaterMark(10*1024*1024);

判断是否可写

if(ctx.channel().isWritebale()){
     msg= .....
     ctx,writeAndFlush(msg)
}

场景二:

网络瓶颈,当消息发送速度超过网络链接处理能力,会导致发送队列积压


场景三

对端读取速度小于已方发送速度,导致自身TCP发送缓冲区满,频繁发送write 0字节,待发送消息会在Netty发送队列中排队。

猜你喜欢

转载自blog.csdn.net/weixin_33860737/article/details/87165521