Yes, Mina has a very useful IoFilter named ReadThrottleFilter, who
relies on IoSession.suspendRead() to take advantage of TCP flow control.
You can use following code to achieve such objective:
Connector = new NioSocketConnector();
Connector.getFilterChain().addLast("exec", new ExecutorFilter());
Connector.getFilterChain().addLast("throttle", new
ReadThrottleFilter(throttleExecutor, ReadThrottlePolicy.BLOCK));
Remember, throttleExecutor is a ScheduledExecutorService instance,
programmer must be reponsible for such executor's lifecycle. In other
words, you should shutdown it later when application is going to
shutdown.
BR
anderson
-----Original Message-----
From: Geoff Cadien [mailto:[EMAIL PROTECTED]
Sent: Thursday, August 07, 2008 12:02 AM
To: [email protected]
Subject: Re: Mina Throttling
On Wed, Aug 6, 2008 at 6:11 AM, Arv Mistry <[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> I have a system which sends a very high throughput of messages. So one
> thing I wanted to be able to do during high loads is to take advantage
> of the TCP flow control i.e be able to throttle back on the TCP socket
> so as not to read off it until the processing catches up.
>
> Does anyone know is there way with Mina to tell it not to read from
> the TCP socket? If I return false in the doDecode of the
> ProtocolDecoder will that do it?
IoSession.suspendRead() will accomplish what you're asking for a single
tcp connection.
-geoff