簡體   English   中英

在系統守護程序下檢測已停止的系統參與者

[英]Detecting stopped system actor under system guardian

我正在使用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;
}

actor被放置在系統守護程序下([akka://myActorSystem/system/akka.persistence.journal.sql-server#123456]),所以我沒有機會像使用.watch(IActorRef)一樣對其進行監視。

我希望在akka.persistence.journal.sql-server或akka.persistence.snapshot.sql-server actor停止的情況下正常重啟系統。 您知道如何處理該問題嗎?

提前致謝,

里奇

您可以為事件日志或快照存儲檢索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");

但是,大多數日記帳參與者在嘗試對基礎數據存儲執行操作時都使用具有指數補償的斷路器模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM