在系统监护下检测已停止的系统actor

时间:2017-09-22 10:31:47

标签: c# akka.net

我'使用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

1 个答案:

答案 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");

然而,当尝试在底层数据存储上执行操作时,大多数日记作者都使用具有指数退避的断路器模式。