def persist[A](event: A)(handler: (A) ⇒ Unit): Unit
def persistAll[A](events: Seq[A])(handler: (A) ⇒ Unit): Unit
对于上面的方法,传递给handler
的param是否保证与持久event
完全相同(具有相同的identifyHashCode)实例?
根据我的一些测试,它们实际上是相同的,但我不知道akka将在未来的版本中始终确保这一点
答案 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。