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

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

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

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

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

【问题讨论】:

    标签: azure-service-fabric


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2018-10-04
      • 2019-08-16
      • 2016-12-10
      • 2017-06-10
      • 2020-08-12
      • 2018-03-11
      • 2019-04-26
      • 2018-07-24
      • 2018-03-22
      相关资源
      最近更新 更多