Я пробовал свою руку на scala + Akka, и я пытаюсь выяснить устойчивость к ошибкам. У меня есть актер, который получает сообщение от супервизора и вставляет данные в БД. Супервизор перезапускает актера, когда он испытывает ошибку.Akka Подход к отказоустойчивости
Я изменяю строку соединения в postRestart() в случае возникновения проблем с подключением к БД. Теперь, когда есть проблема с подключением с одной БД, актер перезагружается и начинает вставлять данные в другую БД.
Это хороший подход? Каков рекомендуемый подход?
Руководитель:
class SocialSupervisor extends Actor {
override val supervisorStrategy=OneForOneStrategy(loggingEnabled = false){
case (e:Exception)=>Restart
}
val post_ref=context.actorOf(Props[Post])
def receive={
case Get_Feed(feed)=>{
//get data from feed
post_ref!Post_Message(posted_by,post)
}
}
}
Актер:
class Post extends Actor{
val config1=ConfigFactory.load()
var config=config1.getConfig("MyApp.db")
override def postRestart(reason: Throwable) {
config=config1.getConfig("MyApp.backup_db")
super.postRestart(reason)
}
def insert_data(commented_by:String,comment:String){
val connection_string=config.getString("url")
val username=config.getString("username")
val password=config.getString("password")
//DB operations
}
def receive={
case Post_Message(posted_by,message)=>{
insert_data(posted_by, message)
}
}
}