场景
应用程序的数据库已关闭。这会导致任何负责将重要数据提交到数据库的参与者无法获得连接
首选行为重要数据在将来某个时间
恢复时被写入数据库。
当前实现
Actor 捕获 DBException,将数据包装在 DBWriteFailed 案例类中,并将消息发送给其主管。然后,主管使用 system.scheduler.scheduleOnce(...) 安排在未来某个时间(例如 1 分钟)进行另一次写入,这样我们就不会在等待数据库恢复时绕圈子太多。
这个实现当然有效,但我觉得可能有更好的方法。
- 当提交参与者在成功提交后必须响应原始发送者时,协议会变得有点混乱。
- 发送到提交参与者的常规消息流不会以任何方式受到限制,并且参与者将愉快地处理新消息,可能无法为每条消息连接到数据库。
- 如果消息在此重试循环中被捕获的时间过长,提交参与者的邮箱将开始膨胀。提交这些数据很重要,但如果应用程序由于内存使用过多而停止或崩溃,这些都无关紧要。
我是一个 akka 新手,在主管策略方面我基本上没有经验,但我觉得我可以利用其中一个来处理一些重试逻辑。
akka 中是否有解决此类问题的通用方法?我是在正确的轨道上还是应该朝着不同的方向前进?
任何帮助表示赞赏。