Service Fabric 来宾可执行文件托管和优雅停止

Posted

技术标签:

【中文标题】Service Fabric 来宾可执行文件托管和优雅停止【英文标题】:Service Fabric Guest Executable hosting and graceful stop 【发布时间】:2017-01-28 12:22:45 【问题描述】:

我有一个要在 Service Fabric 中托管的 .NET 4.6.2 控制台应用程序。 我的应用程序正在监听管理任务的控制台输入事件。

最重要的是 'q' 停止应用程序 - 但以优雅的方式

是否有可能在带有来宾可执行文件的 Service Fabric 中也具有此功能? 当然不是在“按下 q 按钮”上,而是在服务已删除或发生的任何事件上。

如果无法实现与来宾可执行文件的这种集成 - 您建议在哪个项目模板上进行构建?

【问题讨论】:

【参考方案1】:

Service Fabric 在终止来宾可执行进程之前向其发送一个 Ctrl-C 信号,从而允许正常关闭。您可以使用Console.CancelKeyPress 事件或Win32 SetConsoleCtrlHandler 函数来获取通知。请注意,必须将 exe 编译为控制台应用程序才能正常工作。

【讨论】:

使用来宾可执行方法我绝对无法获得 Ctrl-C 信号。我有一个编译的控制台应用程序。这具体记录在哪里?我需要任何额外的 设置吗?我根本没有使用 ServiceFabric SDK(完全不知道如何改进我们的升级路径选项)v 如果你设置EnableActivateNoWindowsetting你也不会收到信号。【参考方案2】:

在您的有状态或无状态服务类中:

class MyService : StatefulService /* or StatelessService */

    protected override Task OnCloseAsync(CancellationToken cancellationToken)
    
        // your graceful shutdown code goes here
    

但不能保证该方法的执行,例如当托管 VM 意外死亡时。

【讨论】:

我考虑过使用一个有状态的服务项目模板来完成这个练习。我不确定这是否是最好的方法。感觉不对(误用模板):-)【参考方案3】:

执行此操作的一种方法是使用DeleteServiceAsync 以编程方式在您完成服务后删除该服务 你也可以重新创建它,使用CreateServiceAsync

【讨论】:

以上是关于Service Fabric 来宾可执行文件托管和优雅停止的主要内容,如果未能解决你的问题,请参考以下文章

管理来宾可执行文件依赖项 - 本地 Service Fabric

Service Fabric 命名服务未转发到分配给来宾可执行文件的端点

如何在 Service Fabric 中安装批处理文件

Service Fabric 健康检查

如何在本地服务结构集群中部署和访问来宾可执行文件(ASP.NET OWIN 自托管 webapi 应用程序)

您如何监控 Fabric.exe 和其他 Service Fabric 可执行文件?