2016-09-19 3 views
2

私は、アプリケーション内にステートレスでステートフルな一連のサービスを用意しています。明らかに私はそれらを完全に実行したいが、私のアプリがそれが失敗から回復できないことを知っているインスタンスがあります。たとえば、KeyVault(およびそのフェイルオーバーコピー)から構成設定をロードできない場合、それ以上は何も進んでいません。サービスファブリック - 正常にアプリケーションを失敗させる方法

質問は、アプリケーション全体をあきらめてサービスファブリックに伝える方法ですか?私はPartition.ReportFault(FaultType.Permenant)を試しましたが、それを祝福し、新しいパーティションを開始しようとします。 :-)

OpsとDevOpsにアラート情報を送信することは明らかです。サービスファブリックが致命的なエラー(レプリカ数x再試行回数)を生成するのではなく、自殺の要求を受け入れることができれば、報告し、最終的に死ぬ。

答えて

0

deleteサービスになります。これは、クラスタにadmin accessの人ができる簡単な管理操作です。これは、クラスタ管理業務への管理者アクセス権を持っているサービスを必要とすることが

using (FabricClient fc = new FabricClient()) 
{ 
    fc.ServiceManager.DeleteServiceAsync(this.Context.ServiceName); 
} 

注:あなたはそれが自殺をしたい場合は、サービス自体はこの方法で削除することができます。サービスがインターネットに面したエンドポイントを持っている場合(あなたのサービスの脆弱性を利用してそのプロセスを管理しているなら、あなたは手に入ります)、そうしたくないかもしれません。その場合、削除タスクを別のサービスに委任するほうがよいでしょう。実行者は管理者アクセス権を持ち、クラスタ内からのみアクセス可能であり、とにかく水中で死んでいるサービスを削除することができます。

+0

ありがとうございました。あなたが提案しているように、私たちは公開エンドポイントを持っているので、私はおそらく "実行者"サービスを使用するでしょう。管理タスクが要求の真正性を検証できるように、「kill me」メッセージを送信する認証された方法を使用し、適切にopsに通知できます。 – MarkD

+0

問題ありません。私は良いアイデアのように聞こえると思う。 –

関連する問題