我第一次接近 Lagom + CQRS/Event Sourcing,我想实现如下行为:
- 执行服务调用(例如通过 REST API 调用)
- 运行命令并触发改变状态的事件(例如启动某种计时器)。
- 在预定义的时间间隔之后,计时器应该到期,因此应该触发一个新事件(无需其他外部命令)以改变状态以使计时器无效。
前两个步骤很简单,但是一旦我触发 TimerStartedEvent 并改变状态,我如何在固定时间后“安排”一个事件?如何实施第三步?
我第一次接近 Lagom + CQRS/Event Sourcing,我想实现如下行为:
前两个步骤很简单,但是一旦我触发 TimerStartedEvent 并改变状态,我如何在固定时间后“安排”一个事件?如何实施第三步?
我找到了一个可能的实现(实际上是在online-auction-scala 示例代码本身)。
因为 Lagom 它是建立在 Akka 之上的,它注入了 ActorSystem,所以你可以使用system.scheduler.schedule
调用来安排未来的一些事情。
为了回答问题的 CQRS 部分,示例代码执行如下操作:
system.scheduler.scheduler(offset, delay) {
checkFinishBidding()
}
checkFinishBidding() = {
registry.refFor[Entity](id).ask(SomeCommand)
}
因此,当时间触发时,您可以将实体 ref 从注册表中取出并运行命令,就像正常的服务调用一样。