Je vais avoir PersistenceActor
et je voudrais faire quelque chose dans sa méthode preRestart
, en me basant sur un message, qui a provoqué le redémarrage. Pour l'acteur régulier qui serait facile, car il y a un message transmis à preRestart
méthode:Comment obtenir le message causant le redémarrage dans Akka Persistence
def preRestart(reason: Throwable, message: Option[Any])
Toutefois, pour PersistentActor
qui ne peut être fait de cette façon, parce que chaque fois None
est passé comme un attribut de message. Elle est causée par ce morceau de code dans 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)
}
}
}
Est-ce que quelqu'un sait pourquoi il est None
passé, perdant le message d'origine?