Azure service fabric Azure服务结构指定服务/应用程序启动依赖项

Azure service fabric Azure服务结构指定服务/应用程序启动依赖项,azure-service-fabric,Azure Service Fabric,简单地问一下,有没有办法在Azure Service Fabric中指定服务/应用程序启动依赖关系 我有两种服务,比如S1和S2。S2依赖于S1,必须在S1启动后启动。目前S1和S2属于不同的应用程序包。如有必要,我也可以将它们放入一个应用程序包中 如果我先启动S1,然后在部署过程中启动S2,它就会工作。然而,服务结构似乎有一些维护工作,在此期间服务会重新启动。现在的问题是无法保证S1和S2的启动顺序,这导致S2在初始化期间无法读取某些配置。S2无声地失败,但仍在运行 在ServiceFabri

简单地问一下,有没有办法在Azure Service Fabric中指定服务/应用程序启动依赖关系

我有两种服务,比如S1和S2。S2依赖于S1,必须在S1启动后启动。目前S1和S2属于不同的应用程序包。如有必要,我也可以将它们放入一个应用程序包中

如果我先启动S1,然后在部署过程中启动S2,它就会工作。然而,服务结构似乎有一些维护工作,在此期间服务会重新启动。现在的问题是无法保证S1和S2的启动顺序,这导致S2在初始化期间无法读取某些配置。S2无声地失败,但仍在运行

在ServiceFabric中,有一种方法可以指定SetupEntryPoint”,但是在这种情况下S1本身有一个“SetupEntryPoint”,此外,我觉得将长时间运行的服务放在“SetupEntryPoint”下是不合适的

我还考虑在S2无法从S1读取配置时停止S2,在这种情况下,服务结构将继续尝试重新启动S2,直到S1启动


但是有没有办法通过服务结构配置来保证S2在S1之后启动?

我也面临同样的问题。我认为单靠服务结构配置是不可能的

最后我提出的解决方案是,我重新设计服务,使其在依赖服务启动之前不会完全启动。在我的情况下,我的服务A依赖于服务B。如果服务A首先启动,它将向消息总线发送消息,并等待服务B回复。如果服务B已经启动,则它将重新启动直接回复。如果服务B还没有启动,一旦启动它就会回复。然后,当服务A得到回复时,它会继续启动。这样,它将始终能够真正完成启动


另一种更简单的方法是,如果服务B关闭,只需在服务A中引发一个异常。服务结构将尝试在另一个节点中启动应用程序,希望到那时服务B已启动。不利的一面是,第一次初始启动将非常缓慢(因为它将不断重试,直到正确的顺序出现)而且您还会看到很多错误(但最终会在所有服务完成启动后消失)

我在S2中添加了一个逻辑来检测S1进程的存在并延迟初始化,这似乎很有效谢谢你,这些都是好主意!同时我认为ServiceFabric团队应该有一个功能来支持这一点。你也可以从a查询服务的状态,并保持到B在线