场景
应用程序的数据库已关闭。这导致负责将重要数据提交给数据库的任何参与者都无法获得连接
首选行为
将来某个时候备份重要数据时,会将其写入数据库。
当前实现
actor捕获DBException,将数据包装在DBWriteFailed案例类中,然后将消息发送给它的主管。然后,主管使用system.scheduler.scheduleOnce(...)安排在将来的某个时间(例如1分钟)再进行一次写操作,这样在等待DB重新启动时,我们就不会旋转太多。
这个实现当然可以,但是我觉得可能会有更好的方法。
我是一个客气的新手,在主管策略方面我经验不足,但是我觉得我也许可以利用其中的一种来处理某些重试逻辑。
Akka是否有解决此类问题的通用方法?我是在正确的道路上还是应该朝着不同的方向前进?
任何帮助表示赞赏。
最佳答案
您可以使用Akka Circuit Breaker减少连接尝试。而不是使用调度程序作为重试队列,我将在actor内使用一个缓冲区(具有最大大小限制),并在断路器再次闭合时重试那些缓冲区(onClose回调应将消息发送给self actor)。另一种选择是将断路器与stashing mailbox组合在一起。
关于database - Akka Actor : Handling DB Failures Without Losing Data,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13907764/