2016-08-03 21 views
0

Nach the docs auszulösen, extern eine Ansicht Update Auslösung sollte wie folgt funktionieren:Wie ein PersistentView Update extern

view ! Update(await = true|false)

Senden und Warten scheinen allerdings nicht zu arbeiten:

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

Der Ansichtszustand wird nicht aktualisiert.

fragen funktioniert auch nicht - es gibt keine Antwort auf Update und die Await mal aus:

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

IIUC, die Verarbeitung von Update Nachrichten von PersistentView#State#stateReceive durchgeführt wird. Der Empfang wird nicht protokolliert und ich weiß nicht, wie ich den Empfang und die Verarbeitung verifizieren kann. Update msgs erreichen nicht die receive in meiner PersistentView übersteuert.

was funktioniert in einem .conf ein sehr kurzes Aktualisierungsintervall einstellen:

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

Das Debug-Protokoll zeigt, dass das Journal die Ansicht aktualisiert:

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

ich das nicht sehen Protokolleintrag beim Senden Update und warten

nach einem kurzen Schlaf, ist die Aussicht aktualisiert, wie erwartet.

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

So wie auslösen ich eine Ansicht Update extern ohne automatische Aktualisierungen laufen die ganze Zeit?

Akka 2.4.8

Danke

EDIT

Mein Fehler war ganz einfach - nicht die anfängliche msg genug Zeit, um beharrte zu werden - der Update Anruf an ein empfangen wurde Zeitpunkt, an dem die relevanten Ereignisse noch nicht im Laden verfügbar waren. Die Autoupdate-Einstellung hat 100 ms gewartet, bevor sie aktualisiert wurde. Auf meiner lokalen Maschine mit In-mem-Persistenz muss ich etwa 50ms vor dem Versand der Update erlauben.Dann geben Sie das System einige Zeit zu holen und die Ereignisse gelten:

nicht funktioniert:

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

Arbeits:

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

Antwort

1

Ich habe versucht, das Problem neu zu erstellen, aber mir Ansicht wird aktualisiert:/ Überprüfen Sie mein Beispiel: https://github.com/kpbochenek/akka-playground

Run MyPersistentView.scala

Auto-Update ist ab

ich in Protokollen (Blick Schauspieler erhält durch anhaltende Schauspieler beharrte Nachrichten) sehen:

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

Danke, kpbochenek. Dein Test hat mir geholfen, mein Missverständnis zu erkennen. Bitte beachten Sie die Änderung – kostja