Azure service fabric 服务结构-如何优雅地使应用程序失败

Azure service fabric 服务结构-如何优雅地使应用程序失败,azure-service-fabric,Azure Service Fabric,我在一个应用程序中有一组无状态和有状态的服务。显然,我希望它们能够完美运行,但我的应用程序知道它无法从故障中恢复。例如,如果它无法从KeyVault(及其故障切换副本)加载其配置设置,则没有必要再进一步 所以问题是,如何告诉ServiceFabric放弃整个应用程序?我已经尝试了Partition.ReportFault(FaultType.Permenant),但幸运的是,它尝试启动一个新分区。:-) 显然,我们正在向Ops和DevOps发送警报信息(包括自动电子邮件),以便它们能够恢复,但如

我在一个应用程序中有一组无状态和有状态的服务。显然,我希望它们能够完美运行,但我的应用程序知道它无法从故障中恢复。例如,如果它无法从KeyVault(及其故障切换副本)加载其配置设置,则没有必要再进一步

所以问题是,如何告诉ServiceFabric放弃整个应用程序?我已经尝试了Partition.ReportFault(FaultType.Permenant),但幸运的是,它尝试启动一个新分区。:-)

显然,我们正在向Ops和DevOps发送警报信息(包括自动电子邮件),以便它们能够恢复,但如果Service Fabric能够接受“自杀”请求,而不是生成(副本计数x重试计数)数量的致命错误报告并最终死亡,那就太好了。

您想要的是服务。这是一个简单的管理操作,任何拥有集群的人都可以执行。如果您希望服务自杀,则可以通过这种方式删除服务本身:

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

请注意,这要求服务具有对群集管理操作的管理员访问权限。如果服务具有面向Internet的端点,您可能不希望这样做(如果有人设法利用您服务中的漏洞并控制流程,那么您就被套住了)。在这种情况下,最好将删除任务委托给另一个具有管理员权限的服务(如果愿意的话,是执行者),该服务只能从集群内部访问,并且可以删除死水中的服务。

谢谢。正如您所建议的,我可能会使用“executioner”服务,因为我们有公共端点。我将使用经过身份验证的方式发送“kill me”消息,这样管理员任务就可以验证请求的真实性,并适当地通知ops。