akka持久化回调参数与持久化事件具有相同的内容

时间:2018-02-11 03:21:26

标签: scala akka akka-persistence

def persist[A](event: A)(handler: (A) ⇒ Unit): Unit

def persistAll[A](events: Seq[A])(handler: (A) ⇒ Unit): Unit

对于上面的方法,传递给handler的param是否保证与持久event完全相同(具有相同的identifyHashCode)实例?

根据我的一些测试,它们实际上是相同的,但我不知道akka将在未来的版本中始终确保这一点

1 个答案:

答案 0 :(得分:1)

从源代码中,我们可以看到它们完全相同。

def persist[A](event: A)(handler: A => Unit): Unit = {
  if (recoveryRunning) throw new IllegalStateException("Cannot persist during replay. Events can be persisted when receiving RecoveryCompleted or later.")
  pendingStashingPersistInvocations += 1
  pendingInvocations addLast StashingHandlerInvocation(event, handler.asInstanceOf[Any => Unit])
  eventBatch ::= AtomicWrite(PersistentRepr(event, persistenceId = persistenceId,
    sequenceNr = nextSequenceNr(), writerUuid = writerUuid, sender = sender()))
}

您可以看到同一event传递给AtomicWrite for persist&也传递给StashingHandlerInvocation处理。我没有看到akka团队稍​​后改变这一点的任何理由。但是,即使是我认为的维护者也没有人可以承诺将来的发布,也许你需要等待那个人来自lightbend。 FYI。