1

我有一个子“消费者”演员,它连接到一些外部数据流,解析其消息并将它们进一步转发到应用程序内部。这个“生产者”系统具有发布-订阅体系结构,但在重新连接后不会恢复订阅。目前我将这些订阅存储在父actor中并在主管中重新发送它们,但问题是当孩子重新启动时,它们被转发到死信队列。我本可以尝试在延迟后将这些安排给父母,但这可能会干扰订阅顺序,这很重要。

那么如何在孩子重新启动时将这些“重新订阅”消息传递给孩子呢?

4

2 回答 2

1

您可以使用 Restart Hooks ( http://doc.akka.io/docs/akka/snapshot/scala/actors.html#Restart_Hooks ):preRestart 和 postRestart api。

在子角色的 preRestart 上,您需要通知主管子角色将重新启动并且主管应该暂停它发送消息。

在子角色的 postRestart 上,您需要通知主管孩子可用并且主管应该继续发送消息。

于 2016-09-13T10:01:35.243 回答
0

你可以订阅死信

context.system.eventStream.subscribe(myListenerActorRef, classOf[DeadLetter])
...
def receive = {
  case DeadLetter(msg, from, to) =>
  //Do my custom stuff here
}

,存储并再次发送。

于 2016-09-13T07:57:44.410 回答