【问题标题】:Blocking a Service Fabric service shutdown externally从外部阻止 Service Fabric 服务关闭
【发布时间】:2018-10-08 15:43:08
【问题描述】:

我将编写一个快速的小型 SF 服务来将服务的端点报告给负载平衡器。这部分很容易理解。面料客户端。查找服务。发现端点。使用负载均衡器 API 做一些事情。

但我希望能够处理正常的排水和关机情况。基本上,捕获并阻止 SF 服务的关闭,直到我的应用程序有机会从池中耗尽与它的连接。

我找不到任何 API 来完成此操作。但我敢打赌,其中一项服务会让我这样做。资源管理员。集群管理器。任何。

有没有人知道如何解决这个问题?

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

    据我所知,这在您描述的方式中是不可能的。

    Service Fabric 服务可能因多种原因关闭:重新平衡、错误、中断、升级等。根据服务类型(有状态或无状态),它们的关闭例程略有不同(请参阅 more),但通常如果服务replica 正常关闭,则调用OnCloseAsync 方法。在这个方法内部replica 可以执行安全清理。还有第二种情况——replica被强制终止。然后调用OnAbort 方法,文档中没有明确声明您在OnAbort 方法中拥有的保证。

    回到你的案例,我可以建议以下模式:

    1. replica 将要在OnCloseAsyncOnAbort 内部关闭时,它会调用lbservice 并报告它将要关闭。
    2. lbservice 重新配置负载平衡器以将此 replica 从请求处理中排除。
    3. replica 完成所有已处理的请求并关闭。

    请注意,您也需要实现启动机制,即当replica 启动时,它会向lbservice 报告它现在处于活动状态。

    同时,我想注意到 Service Fabric 已经实现了这种机制。 Here 是如何将 API 管理 与 Service Fabric 结合使用的示例,here 是如何使用 反向代理 来访问 Service Fabric 服务的示例外面。


    编辑 2018-10-08

    为了抽象接收有关服务端点更改的通知,您可以尝试使用FabricClient.ServiceManagementClient.ServiceNotificationFilterMatched Event

    这个question也解决了类似的情况。

    【讨论】:

    • 是的。不过,我需要能够从特定服务之外进行操作。有些是来宾可执行文件。我在 prem 上运行,而不是 Azure。我正在尝试复制 Azure 中发生的任何会正确消耗 App GW 或 LB 的内容。
    • @wasabi 如果我错了,请纠正我,但您是说该服务将充当 GW 或 LB?还是这个服务要和外部的LB或者GW通信?
    • 它将与外部 LB 或 GW 通信。我想确保在服务实际开始停止之前 LB 已经耗尽。
    • @wasabi 我已经用更多信息更新了答案。
    • 谢谢!这看起来像是我的问题的一部分。这是一个有用的。不过,我认为停止关闭仍然没有得到解决,对吧?
    猜你喜欢
    • 2016-09-07
    • 2016-12-07
    • 2019-09-10
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2015-09-17
    • 1970-01-01
    相关资源
    最近更新 更多