7

假设我想要一个由某个事件创建的 saga,然后坐下来等待几个小时,如果没有任何反应,就发出一些命令。

现在,如果这个 Saga 都在内存中并且我必须重新启动应用程序/服务器,那么这个 saga 将被卸载并且再也见不到了,对吧?

一旦系统重新上线,我会使用事件溯源来加快这个 Saga 的速度吗?

如果是这样,我几乎需要一个带有“活动 saga”的单独事件存储,可以在系统启动时重播,以使我的 Sagas 跟上速度。到目前为止,这对我来说似乎很好,但我将如何实现超时?

我需要某种方式来“伪造”重播时的超时,考虑到可能会有几个后续超时,具体取决于进入传奇的事件。

4

1 回答 1

7

实现此功能的最佳方法是使用能够在某个时间点向您返回消息的另一个端点。例如,您的 saga 可能会向这个“超时管理器”发送一条消息,并说在 1 小时或 1 天甚至 1 年内唤醒我。届时该消息将返回给您。理想情况下,此消息将具有会导致操作发生的业务含义。

也许最好的例子是客户注册,如果客户在注册后 7 天内没有确认他们的帐户,您将通过电子邮件通知他们。“超时消息”实际上是:RemindUserToConfirmAccountMessage。当 saga 在 7 天后收到此消息时,saga 将根据其当前状态确定是否需要处理该消息以及是否需要发送客户电子邮件。但是,如果用户已经确认了他/她的帐户,则可以丢弃该消息而无需采取任何措施。

于 2011-10-11T01:20:27.183 回答