2

我第一次接近 Lagom + CQRS/Event Sourcing,我想实现如下行为:

  1. 执行服务调用(例如通过 REST API 调用)
  2. 运行命令并触发改变状态的事件(例如启动某种计时器)。
  3. 在预定义的时间间隔之后,计时器应该到期,因此应该触发一个新事件(无需其他外部命令)以改变状态以使计时器无效。

前两个步骤很简单,但是一旦我触发 TimerStartedEvent 并改变状态,我如何在固定时间后“安排”一个事件?如何实施第三步?

4

1 回答 1

0

我找到了一个可能的实现(实际上是在online-auction-scala 示例代码本身)。

因为 Lagom 它是建立在 Akka 之上的,它注入了 ActorSystem,所以你可以使用system.scheduler.schedule调用来安排未来的一些事情。

为了回答问题的 CQRS 部分,示例代码执行如下操作:

system.scheduler.scheduler(offset, delay) {
  checkFinishBidding()
}

checkFinishBidding() = {
  registry.refFor[Entity](id).ask(SomeCommand)
}

因此,当时间触发时,您可以将实体 ref 从注册表中取出并运行命令,就像正常的服务调用一样。

于 2017-02-16T08:57:41.087 回答