Blocking IO in Akka

Spread the love

Question Description

I’m doing some Akka lately and wonder: Can I do blocking I/O in Akka without getting into big trouble? Let us say we have an Actor which does some blocking I/O because it uses a legacy library or for any other reason: Couldn’t I just use a special dispatcher for those Actors which a reasonably sized ThreadPool and do blocking I/O without blocking all other actors because they run with a different dispatcher?

What are the downsides of this? And what would be the optimal way to call a 3rd party HTTP-API from an actor?

Practice As Follows

Doing blocking IO is a bad idea in general, and in a reactive multithreaded environment in particular, so your first step is to try to avoid it alltogether, that means looking into using AsyncHttpClient or HttpAsyncClient.

If that does not work, you can at least mitigate the risks by giving the blocking actors their own threads. This will of course be costly and you still risk filling up their mailboxes, but such is the choice of using blocking IO.

You also might want to look at the IO Actor module for a more raw interface to network IO.

Hope any of this helps,

Cheers,

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.