i think you will need to implement your own acking protocol.
SourceActor sends something like PushMessage to ProcessingActor, which
enriches the message with some processing, then sends to the remote
CollectingActor. CollectingActor then responds to ProcessingActor with
AckMessage. ProcessingActor forwards the AckMessage to SourceActor.
Once SourceActor receives AckMessage it sends the next PushMessage.
I don't think bounded mailboxes are a good solution, because they have a
fixed capacity, and that capacity is not related to your network
capacity. an acking protocol will get you better network utilization,
and be more tolerant/performant with respect to changing network conditions.
-Michael
On 02/10/16 17:37, Luben Karavelov wrote:
Hi,
I have the following push dataflow using remote actors (netty.tcp
transport) over the network:
SourceActor -> ProcessingActor ~~ network ~~> CollectingActor
The problem is that if the network is relatively slow the processing
actor successfully sends the messages but they get all buffered inside
the same JVM until it blows with OOM. I am looking how to slow down
the SourceActor if the upstream network is slower than the production
rate. I have put bounded mailbox between the Source and Processing
actor but it does not help because the ProcessingActor is not slowed
by the network transport.
I looked at the code and it looks the problem arises because the
EndpointWriter actor (that is kind of a proxy between the local actors
and the transport as far as I understand) buffers the data to be sent
in itself.
So here are my questions:
1. Is there a way to create a back-pressure between the network
transport and the sender?
2. If there is no way and I have to create an application level
flow-control over the network (between the Processing and Collecting
actors) what will be the best way to slow down the SourceActor? Should
I extend the flow control down to it? Or is there a way to slow down
the reception of messages coming from the SourceActor so that the
bounded mailbox will slow it down (I will still need the other
messages to be delivered for flow-control signalization)?
Thanks in advance for any advises and suggestions,
luben
--
>>>>>>>>>> Read the docs: http://akka.io/docs/
>>>>>>>>>> Check the FAQ:
http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google
Groups "Akka User List" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
Visit this group at https://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.
--
Read the docs: http://akka.io/docs/
Check the FAQ: http://doc.akka.io/docs/akka/current/additional/faq.html
Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google Groups "Akka User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.