2017-09-22 2 views
0

私はAkka.netとAkka.Persistenceバージョン1.3.1を使用しています。システムガーディアンの下で停止したシステムアクタの検出

私は、Akka.Persistence.Sqlによって確立されたデータベース接続に関するアプリケーションのフォールトトレランスを少し強化したいと考えています。

System.Data.SqlClient.SqlException(接続がない、接続が失われているなど)の場合、私は自分のやり方に反応したいと思います。実際、Akka.Persistenceアクタは、初期化中にデータベース接続が失われた場合に停止します。

#SqlSnapshotStore.cs 

private bool WaitingForInitialization(object message) 
{ 
    return message.Match().With<SqlSnapshotStore.Initialized>((Action<SqlSnapshotStore.Initialized>) (_ => 
    { 
    this.UnbecomeStacked(); 
    this.Stash.UnstashAll(); 
    })).With<Failure>((Action<Failure>) (failure => 
    { 
    this.Log.Error(failure.Exception, "Error during snapshot store initialization", new object[0]); 
    ActorBase.Context.Stop(this.Self); 
    })).Default((Action<object>) (_ => this.Stash.Stash())).WasHandled; 
} 

アクターは、システムガーディアン([アッカ://myActorSystem/system/akka.persistence.journal.sql-server#123456])の下に配置されるので、私は使用して他の人のようにそれを監視する機会を持っていません.watch(IActorRef)。

停止したakka.persistence.journal.sql-serverまたはakka.persistence.snapshot.sql-serverアクターの場合にシステムを正常に再起動したいと考えています。あなたはその問題をどう対処するか考えていますか?事前に

おかげで、

Richi

答えて

0

あなたはイベントジャーナルやスナップショットストアのIActorRefを取得することができます。ただしジャーナル俳優のほとんどはと回路ブレーカパターンを使用している

var persistence = Persistence.Instance.Apply(actorSystem); 
var journalRef = persistence.JournalFor(null); // default journal 
var journalRef2 = persistence.JournalFor("akka.persistence.journal.sql-server"); 
var snapshotStore = persistence.SnapshotStoreFor(null); // default snapshot store 
var snapshotStore2 = persistence.SnapshotStoreFor("akka.persistence.snapshot.sql-server"); 

基礎となるデータストアでアクションを実行しようとするときに指数関数的にバックオフします。

関連する問題