如何调用持久化的Seq变体?

时间:2015-03-24 22:53:22

标签: scala akka event-sourcing akka-persistence

Akka Persistence中persist方法对事件序列的预期用法是什么?我看到有这样的签名here

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

但是如果我尝试按照以下示例中那样调用它

def receiveCommand= {
  case x ⇒
    val events = Seq(Event("1"), Event("2"))
    persist(events) {
      e ⇒ println(e) // here it gets printed "List(Event(1),Event(2))"
    }
}

我打印了一个单独的事件List(Event(1),Event(2))。也就是说,我期望按照给出的顺序分别处理每个事件。但相反,它似乎在以下persist变体

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

类型参数ASeq[Event]替换,而不是被Event替换并调用序列变体。使用此方法的预期方式是什么?

感谢。

1 个答案:

答案 0 :(得分:2)

请注意

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

需要

  scala.collection.immutable.Seq

作为参数,所以你必须传递这个具体的Seq类型:

 val events: scala.collection.immutable.Seq = scala.collection.immutable.Seq("event")   
 persist(events) { event =>
     log.debug("persisted " + event) 
 }