我有一个在应用程序启动时作为另一个actor的子级创建的actor,并且每天从父级接收一条消息,以执行从某个SFTP服务器获取一些文件的操作。
现在,可能有一些小的临时连接异常会导致操作失败。在这种情况下,需要重试。
但是可能会抛出异常并且在重试时不会解决(例如:找不到文件,某些配置不正确等)
因此,在这种情况下,考虑到参与者将在很长一段时间后(每天一次)接收消息,什么可能是适当的重试机制和监督策略。
在这种情况下,发送给actor的消息不是错误的输入——它只是一个触发器。例子:
case object FileFetch
如果我在父母中有这样的监督策略,它将在每个次要/主要异常上重新启动失败的孩子而不重试。
override val supervisorStrategy =
OneForOneStrategy(maxNrOfRetries = -1, withinTimeRange = Duration.inf) {
case _: Exception => Restart
}
我想要的是这样的:
override val supervisorStrategy =
OneForOneStrategy(maxNrOfRetries = -1, withinTimeRange = Duration.inf) {
case _: MinorException => Retry same message 2, 3 times and then Restart
case _: Exception => Restart
}