【问题标题】:Azure Service Fabric StatelessService does not call OnCloseAsyncAzure Service Fabric StatelessService 不调用 OnCloseAsync
【发布时间】:2018-10-26 18:22:06
【问题描述】:

我有一个简单的 StatelessService,我想知道它何时被关闭,以便我可以进行一些快速清理。但它似乎从不调用 OnCloseAsync。

当服务正在运行并且我通过 Service Fabric Explorer 在正在运行的节点上使用“重新启动”命令时,它会删除服务并重新启动节点。但它从不调用 OnCloseAsync 覆盖,即使它是有意关闭的。

它也不表示传递给 RunAsync 方法的cancellationToken。因此没有迹象表明该服务正在关闭。是否存在调用 OnCloseAsync 的任何情况,因为我目前看不出它有什么意义。

【问题讨论】:

    标签: azure azure-service-fabric


    【解决方案1】:

    我想知道发出重启命令背后的原因,你期望什么行为? 它确实解释了您看到的行为。来自the docs(请记住,重新启动只是停止和启动的组合)

    停止一个节点会使其进入停止状态,此时它不是集群的成员,也不能托管服务,从而模拟一个宕机节点。这对于将故障注入系统以测试您的应用程序很有用。

    现在,如果我们看一下the lifecycle,我们会读到:

    在每个侦听器上的 CloseAsync() 完成并且 RunAsync() 也完成后,将调用服务的 StatelessService.OnCloseAsync() 方法(如果存在)。当无状态服务实例将要正常关闭时调用 OnCloseAsync。

    所以,基本问题是您的服务没有正常关闭。重启命令会终止进程并且不会发出取消。

    【讨论】:

    • 感谢您的澄清,我没有意识到 Restart 模拟了故障,但认为这是一个优雅的重启。我的错。有没有办法调用服务的优雅重启?我找不到任何东西。
    • @PhilWright This post 可能会有所帮助。
    猜你喜欢
    • 2019-11-30
    • 2018-07-29
    • 1970-01-01
    • 2015-09-17
    • 2018-09-15
    • 2015-12-24
    • 2017-09-02
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多