【问题标题】:Is akka persist callback param just the same intance as persisted eventakka 持久化回调参数是否与持久化事件的实例相同
【发布时间】:2018-02-11 21:43:03
【问题描述】:
def persist[A](event: A)(handler: (A) ⇒ Unit): Unit

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

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

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

【问题讨论】:

    标签: scala akka akka-persistence


    【解决方案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 用于持久化,也可以传递给StashingHandlerInvocation 用于处理。我没有看到 akka 团队后来有任何改变这一点的理由。但是,即使是我认为的维护者,也没有人可以承诺未来的发布,也许你需要等待来自 lightbend 的人。仅供参考。

    【讨论】:

    • 这个官方邮件列表可以帮助你:here
    猜你喜欢
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多