假设我想要一个由某个事件创建的传奇,然后等待几个小时,如果没有任何反应,请发出一些命令。
现在,如果这个Saga全部在内存中并且我不得不重新启动应用程序/服务器,那么传奇将被卸载并且再也不会被看到了,对吧?
一旦系统重新上线,我会使用Event Sourcing来使这个Saga加速吗?
如果是这样的话,我需要一个单独的Event Store,其中包含“活跃的传奇”,可以在系统启动时重播,让我的Sagas加快速度。到目前为止,对我来说似乎很好,但我如何实现超时呢?
我需要一些“伪造”重播超时的方法,考虑到可能有几个,随后的超时取决于进入传奇的事件。
答案 0 :(得分:7)
实现此功能的最佳方法是使用另一个端点,该端点能够在特定时间点将消息返回给您。例如,您的传奇可能会向此“超时管理员”发送消息,并说在1小时或1天甚至1年内叫醒我。然后该消息将返回给您。理想情况下,此消息具有可导致操作发生的业务含义。
也许最好的例子就是客户注册,如果客户在注册后7天内未确认其帐户,您可以通过电子邮件通知他们。 “超时消息”实际上是:RemindUserToConfirmAccountMessage。当7天后传奇收到此消息时,传奇将根据其当前状态确定是否需要处理该消息并且需要发送客户电子邮件。但是,如果用户已经确认了他/她的帐户,则可以丢弃该消息而不执行任何操作。