我有一个孩子"消费者"连接到某些外部数据流的actor,解析其消息并在应用程序内进一步转发它们。这个"制作人" system具有pub-sub体系结构,但在重新连接后不会还原订阅。目前我将这些订阅存储在父actor中并在supervisor中重新发送,但问题是当子进程重新启动时,它们会被转发到死信队列。我可以尝试在延迟一段时间后将这些安排给父母,但这可能会影响订阅顺序,这很重要。
那么我该如何提供这些"重新订阅"在孩子重新启动时给孩子的消息?
答案 0 :(得分:1)
你可以使用Restart Hooks(http://doc.akka.io/docs/akka/snapshot/scala/actors.html#Restart_Hooks):preRestart和postRestart api。
在儿童演员的preRestart上,您需要通知主管儿童演员将重新开始,主管应该暂停其发送消息。
在关于儿童演员的postRestart上,您需要通知主管孩子可用并且主管应该恢复发送消息。
答案 1 :(得分:0)
您可以使用
订阅死信context.system.eventStream.subscribe(myListenerActorRef, classOf[DeadLetter])
...
def receive = {
case DeadLetter(msg, from, to) =>
//Do my custom stuff here
}
,再次存储和发送。