I am looking at how I can hook up an actor system with synchronous controller code. Essentially there are REST endpoints and other methods that have to make certain calls and then wait for the response for going on. Essentially bridging the actor system to a non-actor system. I know I can use the Ask pattern to create Akka futures but to be honest the pattern is very complex to use and might be beyond the skills of some of the Akka newbies. One other problem with the Ask pattern is that Akka futures are cumbersome to use in Java code and we have a large mix of java and Scala code. What I was wondering is if anyone had tried to use micro actors to implement synchronous callbacks. Erlang has the capability to create thousands of actors and dispose of them quickly which is very useful for things like micro actors that do only one specific task. A first pass at how it might look, integrating with a Java Completable future is below.
The questions I want to pose are basically: 1) Has anyone tried to use MicroActors and if so, are there any code samples or experiences you can relate to make the process easier. 2) Is Akka going to be performant creating actors that exist merely for the span of a specific method call or will the overhead be too high? 3) Is my implementation on the right track or is there an easier or simpler way to do this to make it easy. Given that the goal I have is user calls send and waits for response but its done with either completable futures or some other mechanism that blocks for response. Thanks in advance. Draft code below: import java.util.concurrent.CompletableFuture import akka.actor.{Props, ActorRef, UntypedActor} import play.libs.Akka class CompletableFutureMicroActor[T](val responseMessageType: Class[T], val future: CompletableFuture[T]) extends UntypedActor{ override def onReceive(message: Any): Unit = message match { case response: T => future.complete(response) context.stop(context.self) } } object CompletableFutureMicroActor { def send[T](responseMessageType: Class[T], target: ActorRef, message: Any) : CompletableFuture[T] = { val future = new CompletableFuture[T]() val props = Props(classOf[CompletableFutureMicroActor], responseMessageType, future) val receiver = Akka.system().actorOf(props) target.tell(message, receiver) future } } -- >>>>>>>>>> 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 akka-user+unsubscr...@googlegroups.com. To post to this group, send email to akka-user@googlegroups.com. Visit this group at http://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout.