2016-09-19 69 views
2

我在應用程序中有一組無狀態和有狀態的服務。很顯然,我希望它們能夠完美運行,但有些情況下我的應用程序知道它無法從故障中恢復。例如,如果無法從KeyVault(及其故障轉移副本)加載其配置設置,則沒有任何意義。服務結構 - 如何優雅地失敗應用程序

所以問題是,如何讓服務面料放棄整個應用?我已經嘗試了Partition.ReportFault(FaultType.Permenant),但保佑它,它試圖啓動一個新的分區。 :-)

很顯然,我們正在向Ops和DevOps發送警報信息,包括自動電子郵件,以便它們可以恢復,但是如果Service Fabric可以接受「自殺」請求而不是生成(副本計數x重試計數)致命錯誤數報告並最終死亡。

回答

0

你想要的是delete該服務。這是一個簡單的管理操作,任何人都可以使用admin access

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

注意,這需要該服務具有集羣管理操作管理權限:如果你想自殺服務可以刪除自己這個樣子。如果服務具有面向Internet的端點(如果有人設法利用服務中的漏洞並控制流程,那麼您可能不希望這樣)。在這種情況下,將刪除任務委派給另一個服務會更好 - 如果您願意的話,只要您具有管理員訪問權限的執行者只能從羣集內部訪問,並且可以刪除無用的服務。

+0

謝謝。正如你所建議的,我可能會使用「execution子手」服務,因爲我們有公共端點。我將使用通過身份驗證的方式發送「殺死我」消息,以便管理員任務可以驗證請求的真實性,並且可以適當地通知操作。 – MarkD

+0

沒問題。我認爲這聽起來像個好主意。 –

相關問題