【问题标题】:How to get message causing restart in Akka Persistence如何在 Akka Persistence 中获取导致重启的消息
【发布时间】: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


    【解决方案1】:

    这似乎是一个疏忽,我们应该在 Akka 中修复它,我已经打开了一张票来跟踪修复它:https://github.com/akka/akka/issues/21824

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 2014-09-08
      • 2016-07-10
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      相关资源
      最近更新 更多