I\'m trying to use the Source.actorRef method to create an akka.stream.scaladsl.Source object. Something of the form
import akka.stream.OverflowStrategy.fai
Instance of ActorRef, like all 'materialized values', will become accessible only once whole stream is materialized, or, in other words, when RunnableGraph is being run.
// RunnableGraph[ActorRef] means that you get ActorRef when you run the graph
val rg1: RunnableGraph[ActorRef] = sunnySource.to(Sink.foreach(println))
// You get ActorRef instance as a materialized value
val actorRef1: ActorRef = rg1.run()
// Or even more correct way: to materialize both ActorRef and future to completion
// of the stream, so that we know when we are done:
// RunnableGraph[(ActorRef, Future[Done])] means that you get tuple
// (ActorRef, Future[Done]) when you run the graph
val rg2: RunnableGraph[(ActorRef, Future[Done])] =
sunnySource.toMat(Sink.foreach(println))(Keep.both)
// You get both ActorRef and Future[Done] instances as materialized values
val (actorRef2, future) = rg2.run()
actorRef2 ! Weather("90210", 72.0, false)
actorRef2 ! Weather("02139", 32.0, true)
actorRef2 ! akka.actor.Status.Success("Done!") // Complete the stream
future onComplete { /* ... */ }