docsによると、ビューの更新を外部からトリガーすることは、次のように機能するはずです。
view ! Update(await = true|false)
ただし、送信と待機は機能しないようです:
view ! Update(await = true) // repeat x times does not help either
Thread.sleep(2000)
val getState = view ? GetState
ビューステートは更新されていません。
尋ねても機能しません-答えがなくUpdate
、Await
タイムアウトします:
val getUpdate = v ? Update(await = true)
val updated = Await.result(getUpdate, 10 seconds)
val getState = view ? GetState
IIUC、Update
メッセージの処理は によって実行されPersistentView#State#stateReceive
ます。その受信はログに記録されておらず、受信と処理を確認する方法がわかりません。Update
メッセージreceive
は、私のPersistentView
.
機能するのは、次のように非常に短い更新間隔を設定すること.conf
です:
persistence.view.auto-update-interval = 100ms
デバッグ ログは、Journal がビューを更新していることを示しています。
... a.p.i.e.InMemoryJournalStorage akka://entityViewSpec/user/JournalStorage - received handled message GetJournalEntriesExceptDeleted(ea-ZleUNl1a3N,1,1,9223372036854775807) from Actor[akka://entityViewSpec/temp/$o]
Update
送信および待機中にこのログ エントリが表示されない
短いスリープの後、期待どおりにビューが更新されます。
Thread.sleep(200)
val getState = view ? GetState
では、常に自動更新を実行せずにビューの更新を外部からトリガーするにはどうすればよいでしょうか?
アッカ 2.4.8
ありがとうございました
編集
私の間違いは非常に単純でした - 最初のメッセージを保持するのに十分な時間を与えていませんでした -Update
関連するイベントがまだストアから利用できないときに呼び出しが受信されました. 自動更新設定は、更新前に 100 ミリ秒待機しました。メモリ内永続性を備えたローカル マシンでは、Update
. 次に、システムがイベントをフェッチして適用する時間を与えます。
動作していません:
actor ! MyCommand
view ! Update(await = true)
Thread.sleep(500)
val getState = view ? GetState
働く:
actor ! MyCommand
Thread.sleep(50)
view ! Update(await = true)
Thread.sleep(500)
val getState = view ? GetState