2015-03-24 2 views
0

Quelle est l'utilisation prévue de la méthode persist dans Akka Persistence pour les séquences d'événements? Je vois qu'il ya une signature comme celui-ci here:Comment appeler la variante Seq de persist?

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

mais si je tente de l'appeler comme dans l'exemple suivant

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))" 
    } 
} 

je faire imprimer un seul événement List(Event(1),Event(2)). Autrement dit, je m'attendais à gérer chaque événement séparément et dans l'ordre où ils sont donnés. Mais au contraire, il semble que dans la variante suivante persist

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

le paramètre de type A est remplacé par Seq[Event] au lieu d'être remplacé par Event et appeler la variante de séquence. Quelle est la manière attendue d'utiliser cette méthode?

Merci.

+0

Est-ce que 'persiste [Event] (événements) 'travail? – Kolmar

+0

@Kolmar Ce n'est pas le cas. – ale64bit

Répondre

2

Sachez que

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

prend un

scala.collection.immutable.Seq 

comme argument si vous devez passer dans ce type de béton Seq:

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

Donc, quand vous écrivez 'Seq (1,2,3)' sans spécifier, c'est en fait une séquence mutable? – ale64bit

+0

Non. En fait c'est une séquence immuable car c'est la valeur par défaut de scala. Mais le problème ici est qu'il n'est pas typé en tant que tel. Vous pouvez importer scala.concurrent.immutable.Seq au-dessus de votre fichier source pour indiquer que toutes les séquences sont immuables. Le peuple akka avait l'intention d'être sûr que le seq devait être immuable mais aurait dû choisir un nom de méthode différent pour éviter toute confusion. –