从外部阻止Service Fabric服务关闭

时间:2018-09-19 03:48:21

标签: azure-service-fabric

我将编写一个快速的小型SF服务,以将端点从服务报告给负载均衡器。这部分很容易理解。 FabricClient。查找服务。发现端点。使用负载均衡器API进行操作。

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

我找不到API可以完成此任务。但是我敢打赌,其中一项服务会让我做到这一点。资源经理。集群管理器。随你。

有人知道如何实现吗?

1 个答案:

答案 0 :(得分:0)

据我所知,这不可能以您所描述的方式实现。

可以通过多种原因关闭Service Fabric服务:重新平衡,错误,中断,升级等。根据服务的类型(有状态或无状态),它们的关闭例程略有不同(请参阅more),但是通常,如果服务replica正常关闭,则将调用OnCloseAsync方法。在此方法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中也解决了类似的情况。