我正在使用 netty 来开发将通过 TCP 侦听特定端口的应用程序。一旦收到字节,我就有一个带有业务逻辑的管道,可以在收到的字节上运行。该管道由多个通道处理程序组成,如标头解码器、应用程序级碎片处理程序等。在管道结束时,一旦处理完消息,管道中的最后一个处理程序(例如 BufferWriter)会将处理后的消息放入阻塞队列。这个阻塞队列就像缓冲区一样,而 BufferWriter 就像生产者一样。请注意,此阻塞队列在所有通道之间共享。因此,应用程序接收到的所有数据都将写入单个队列。还有另一个预定的执行器服务将作为这个缓冲区的消费者。这个消费者是周期性任务,它以特定的时间间隔运行并从缓冲区获取消息并写入文件。
我遇到的问题是,当有大量传入流量时,我的消费者线程无法跟上步伐。导致缓冲区队列变满。
在netty中,有什么办法可以降低socket的读取速度,让消费者跟上生产者的步伐?比如,一旦缓冲区满了,netty 就不会从套接字读取,只要缓冲区有空间,它就会继续从套接字读取。
请注意,在这种情况下,发送者不是用 java/netty 编写的。它们是 c 程序,它将与我的服务器形成 TCP 连接并开始发送数据。我假设,当我减慢服务器套接字读取速率时,TCP 将使用拥塞控制策略自动减慢发送方(慢启动)