私はscala + Akkaで私の手を試しています。フォールトトレランスを理解しようとしています。スーパーバイザからメッセージを受け取り、DBにデータを挿入する俳優がいます。スーパーバイザは、障害が発生したときにアクタを再起動します。Akkaフォールトトレランスのアプローチ
DBへの接続に問題がある場合に備えて、postRestart()の接続文字列を変更しています。現在、あるDBとの接続に問題が発生すると、アクタが再起動し、別のDBへのデータの挿入が開始されます。
これは十分なアプローチですか?推奨されるアプローチは何ですか?
スーパーバイザー:
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)
}
}
}