mardi 21 avril 2015

Subscribing multiple actors to Dead Letters in Akka

I am trying to create a simple application that has two actors:

  • Master actor that handles
  • DeadLettersListener that is supposed to handle all dead or unhandled messages

Here is the code that works perfectly:

object Hw extends App {
  // creating Master actor
  val masterActorSystem = ActorSystem("Master")
  val master = masterActorSystem.actorOf(Props[Master], "Master")

  // creating Dead Letters listener actor
  val deadLettersActorSystem = ActorSystem.create("DeadLettersListener")
  val listener = deadLettersActorSystem.actorOf(Props[DeadLettersListener])

  // subscribe listener to Master's DeadLetters
  masterActorSystem.eventStream.subscribe(listener, classOf[DeadLetter])
  masterActorSystem.eventStream.subscribe(listener, classOf[UnhandledMessage])
}

According to the akka manual though, ActorSystem is a heavy object and we should create only one per application. But when I replace these lines:

val deadLettersActorSystem = ActorSystem.create("DeadLettersListener")
val listener = deadLettersActorSystem.actorOf(Props[DeadLettersListener])

with this code:

val listener = masterActorSystem.actorOf(Props[DeadLettersListener], "DeadLettersListener")

The subscription does not work any more and DeadLettersListener is not getting any Dead or Unhandled messages.

Can you please explain what am I doing wrong and give an advice how to subscribe to Dead Letters in this case?

Aucun commentaire:

Enregistrer un commentaire