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
Merci, kpbochenek. Votre test m'a aidé à voir mon malentendu. s'il vous plaît voir la modification – kostja