我的应用程序需要记录演员处理的所有邮件,并有时在minSequenceNr
和maxSequenceNr
之间重播邮件。
akka-persistence对这个用例有好处吗?如果是,我如何强制从日志重播消息?我可以使用Persistence(actorSystem).journalFor("x")
来获取期刊的ActorRef,但我无法发送JournalProtocol.ReplayMessages
,因为JournalProtocol
是akka.persistence
的私有。
答案 0 :(得分:4)
此问题已在akka-user上提出并回答:https://groups.google.com/forum/#!topic/akka-user/AJjdIt_bztM
在Akka 2.3.x(非常旧的版本)
您是否阅读过有关恢复的文档http://doc.akka.io/docs/akka/2.3.4/scala/persistence.html#recovery? 您可以通过向自己发送Recover(toSequenceNr:Long)消息来开始恢复。
我们不支持范围(如“从200到400”)回放,跳过事件(“来自N”)与事件采购理念不相符。
另一方面,您可以轻松发出重播“至400”,只需在您的演员中选择忽略seqNr低于200的任何事件, 这取得了你所追求的最终结果。
在Akka 2.4.x上
Akka Persistence自2.4进入稳定版本后,不允许在你的生命中间随机重播。我们发现它造成了更多的错误而不是对人们有益。请阅读http://doc.akka.io/docs/akka/2.4.5/scala/persistence.html
我希望这会有所帮助,快乐的开玩笑!