【发布时间】:2015-04-21 09:18:05
【问题描述】:
我正在尝试创建一个包含两个参与者的简单应用程序:
- 处理一些应用操作的主actor
- DeadLettersListener 应该处理所有无效或未处理的消息
这是完美运行的代码:
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])
}
根据 akka 手册,ActorSystem 是一个沉重的对象,我们应该为每个应用程序只创建一个。但是当我替换这些行时:
val deadLettersActorSystem = ActorSystem.create("DeadLettersListener")
val listener = deadLettersActorSystem.actorOf(Props[DeadLettersListener])
使用此代码:
val listener = masterActorSystem.actorOf(Props[DeadLettersListener], "DeadLettersListener")
订阅不再起作用,并且 DeadLettersListener 没有收到任何 Dead 或 Unhandled 消息。
您能否解释一下我做错了什么,并给出在这种情况下如何订阅 Dead Letters 的建议?
【问题讨论】:
标签: scala functional-programming akka