根据文档,从外部触发视图更新应该像这样工作:
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
.
起作用的是在 a 中设置一个非常短的刷新间隔.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 毫秒。在具有 in-mem 持久性的本地计算机上,我需要等待大约 50 毫秒,然后再发送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