我'使用Akka.net和Akka.Persistence版本1.3.1。
我想让我的应用程序对由Akka.Persistence.Sql建立的数据库连接提供更多容错。
如果是System.Data.SqlClient.SqlException(没有连接,连接丢失等等),我想以我的方式做出反应。实际上,在初始化时数据库连接丢失的情况下,Akka.Persistence actor会自行停止。
#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;
}
演员被置于系统监护人([akka://myActorSystem/system/akka.persistence.journal.sql-server#123456])下,所以我没有机会像其他人一样使用.watch监视它(IActorRef )。
我希望在已停止的akka.persistence.journal.sql-server或akka.persistence.snapshot.sql-server actor的情况下正常重启我的系统。你知道如何处理这个问题吗?
提前致谢,
RICHI
答案 0 :(得分: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");
然而,当尝试在底层数据存储上执行操作时,大多数日记作者都使用具有指数退避的断路器模式。