简要问一下,有没有办法在Azure Service Fabric中指定服务/应用程序启动依赖项?
我有两个服务,比如S1和S2。 S2取决于S1,必须在S1启动后启动。目前S1和S2属于不同的应用程序包。如有必要,我也可以将它们放入一个应用程序包中。
如果我首先启动S1,然后在部署期间启动S2,它会起作用。但是,似乎Service Fabric有一些维护工作,在此期间服务重新启动。现在问题是无法保证启动S1和S2的顺序,这导致S2在初始化期间无法读取某些配置。 S2无声地失败但仍在继续运行。
在Service Fabric中有指定SetupEntryPoint"的方法,但是在这种情况下,S1本身有一个" SetupEntryPoint",此外我觉得将长期运行的服务放在下面是不合适的。 " SetupEntryPoint"
我还考虑在无法从S1读取配置时停止S2,在这种情况下,Service Fabric将继续尝试重新启动S2,直到S1开始。
但有没有办法保证S2在S1到Service Fabric配置后启动?
答案 0 :(得分:1)
我也遇到了同样的问题。我不认为仅通过Service Fabric配置就可以实现。
最终我提出的解决方案是,我重新设计服务的方式是它不会完全启动,除非依赖服务已启动。在我的情况下,我的服务A依赖于服务B.如果服务A首先启动,它将向消息总线发送消息,并等待服务B回复。如果服务B已经启动,那么它将直接回复。如果服务B尚未启动,一旦启动它就会回复。然后,当服务A得到答复时,它将继续它的启动。这样它始终能够真正完成起步。
另一种更简单的方法是,如果服务B关闭,只需在服务A中抛出异常.Service Fabric将尝试在另一个节点中启动应用程序,并希望服务B启动。不好的一面是,第一次初始启动会非常慢(因为它会一直重试,直到出现正确的顺序),而且你会看到很多错误(但最终会全部消失)服务完成启动)