【发布时间】:2016-11-09 12:34:03
【问题描述】:
我有PersistenceActor,我想在它的preRestart 方法中做一些事情,基于一条导致重启的消息。对于普通的演员来说这很容易,因为有消息传递给preRestart 方法:
def preRestart(reason: Throwable, message: Option[Any])
但是对于PersistentActor,不能以这种方式完成,因为每次None 都作为消息属性传递。是Eventsourced.scala中的那段代码造成的:
override protected[akka] def aroundPreRestart(reason: Throwable, message: Option[Any]): Unit = {
try {
internalStash.unstashAll()
unstashAll(unstashFilterPredicate)
} finally {
message match {
case Some(WriteMessageSuccess(m, _)) ⇒
flushJournalBatch()
super.aroundPreRestart(reason, Some(m))
case Some(LoopMessageSuccess(m, _)) ⇒
flushJournalBatch()
super.aroundPreRestart(reason, Some(m))
case Some(ReplayedMessage(m)) ⇒
flushJournalBatch()
super.aroundPreRestart(reason, Some(m))
case mo ⇒
flushJournalBatch()
super.aroundPreRestart(reason, None)
}
}
}
有谁知道为什么None 在那里传递,丢失了原始消息?
【问题讨论】:
标签: scala akka akka-persistence