2016-08-03 1 views
0

Selon the docs, ce qui déclenche une mise à jour de vue est externe censé fonctionner comme ceci:Comment déclencher une mise à jour PersistentView externe

view ! Update(await = true|false)

envoi et attente semble ne pas fonctionner si:

view ! Update(await = true) // repeat x times does not help either 
Thread.sleep(2000) 
val getState = view ? GetState 

l'état d'affichage n'est pas mis à jour.

demandé ne fonctionne pas non plus - il n'y a pas de réponse à Update et les Await fois sur:

val getUpdate = v ? Update(await = true) 
val updated = Await.result(getUpdate, 10 seconds) 
val getState = view ? GetState 

IIUC, le traitement des messages Update est effectuée par PersistentView#State#stateReceive. Sa réception n'est pas enregistrée et je ne sais pas comment je peux vérifier la réception et le traitement. Update msgs n'atteignent pas le receive remplacé dans mon PersistentView.

ce qui fonctionne est la fixation d'un intervalle de rafraîchissement très court dans un .conf:

persistence.view.auto-update-interval = 100ms 

Le journal de débogage montre que le Journal est mise à jour de la vue:

... a.p.i.e.InMemoryJournalStorage akka://entityViewSpec/user/JournalStorage - received handled message GetJournalEntriesExceptDeleted(ea-ZleUNl1a3N,1,1,9223372036854775807) from Actor[akka://entityViewSpec/temp/$o]

Je ne vois pas ce entrée de journal lors de l'envoi Update et en attente

après un court sommeil, la vue est mis à jour, comme prévu. Comment puis-je déclencher une mise à jour de vue en externe sans exécuter les autoupdates tout le temps?

Thread.sleep(200) 
val getState = view ? GetState 

Akka 2.4.8

Merci

EDIT

Mon erreur a été assez simple - ne pas donner suffisamment de temps pour msg initial être persisté - a été reçu l'appel Update à moment où les événements pertinents n'étaient pas encore disponibles dans le magasin. Le paramètre autoupdate a attendu 100ms avant la mise à jour. Sur ma machine locale avec persistance in-mem, je dois autoriser environ 50 ms avant d'envoyer le Update.Ensuite, donnez le système un certain temps pour chercher et appliquer les événements:

ne fonctionne pas:

actor ! MyCommand 
view ! Update(await = true) 
Thread.sleep(500) 
val getState = view ? GetState 

travail:

actor ! MyCommand 
Thread.sleep(50) 
view ! Update(await = true) 
Thread.sleep(500) 
val getState = view ? GetState 

Répondre

1

J'ai essayé de recréer votre problème, mais vue la mienne est rafraîchie:/ Vérifiez mon exemple: https://github.com/kpbochenek/akka-playground

Run MyPersistentView.scala

mise à jour automatique est désactivée

Je peux voir dans les journaux (Voir l'acteur reçoit des messages subsisté par l'acteur persistant):

00:11:35.325 [pw-akka.actor.default-dispatcher-5] INFO com.kpbochenek.MyActor - persisted! AAAAAAAA 
00:11:35.326 [pw-akka.actor.default-dispatcher-9] INFO com.kpbochenek.MyActor - persisted! 11111111 
00:11:37.254 [pw-akka.actor.default-dispatcher-4] INFO com.kpbochenek.MyView - VIEW READ AAAAAAAA 
00:11:37.255 [pw-akka.actor.default-dispatcher-4] INFO com.kpbochenek.MyView - VIEW READ 11111111 
+0

Merci, kpbochenek. Votre test m'a aidé à voir mon malentendu. s'il vous plaît voir la modification – kostja