情景
应用程序的数据库崩溃了。这导致任何负责将重要数据提交到数据库的操作者都无法获得连接。
期望行为
在未来的某个时间,当数据库重新启动时,将重要数据写入数据库。
当前实现
操作者捕获DBException,将数据包装在DBWriteFailed case类中,并将消息发送给其监管者。然后,监管者使用system.scheduler.scheduleOnce(...)安排另一个写入,在未来的某个时间(例如1分钟)进行,以便我们不会在等待数据库重新启动时被卡住。
这种实现肯定有效,但我觉得可能还有更好的方法。
- 当提交操作者必须在成功提交后响应原始发送方时,协议会变得有点混乱。
- 提交操作者的常规消息流程没有进行任何限制,该操作者将愉快地处理新消息,很可能每个消息都无法连接到数据库。
- 如果消息在这个重试循环中被卡住太长时间,提交操作者的邮箱将开始膨胀。重要的是提交这些数据,但如果应用程序由于过度使用内存而变得缓慢或崩溃,则所有这些都没有意义。
我是一个Akka新手,当涉及到监管者策略时我基本上没有经验,但我觉得我可能可以利用其中一种来处理一些重试逻辑。
在Akka中是否有解决此类问题的常见方法?我走对了还是应该朝着不同的方向前进?
感谢任何帮助。