2016-12-28 91 views
1

簡要問一下,有沒有一種方法可以指定Azure服務結構中的服務/應用程序啓動依賴關係?Azure服務結構指定服務/應用程序啓動依賴關係

我有兩個服務,比如S1和S2。 S2取決於S1,必須在S1啓動後啓動。目前S1和S2處於不同的應用程序包中。如有必要,我也可以將它們放入一個應用程序包中。

它的工作原理是,如果我先啓動S1,然後在部署期間啓動S2。但是,似乎Service Fabric有一些維護工作,在此期間服務會重新啓動。現在問題在於不能保證啓動S1和S2的順序,這會導致S2在初始化期間無法讀取某些配置。 S2悄然失敗,但仍在繼續運行。

在服務織物有辦法來指定SetupEntryPoint」,但是在這種情況下,S1本身具有‘SetupEntryPoint’,況且我覺得這是不恰當的把長期運行的服務在‘SetupEntryPoint’。

我m也考慮讓S2在無法從S1讀取配置時停止,在這種情況下Service Fabric將繼續嘗試重新啓動S2,直到S1啓動爲止

但是有沒有什麼方法可以保證S2在通過Service Fabric配置後啓動?

+0

我在S2中添加了一個邏輯來檢測S1進程的存在和延遲初始化,這似乎工作 – user2188649

回答

1

我也遇到了同樣的問題,我認爲這不可能通過Service Fabric配置。

最後我提出的解決方案是,我重新設計服務的方式是,除非依賴服務啓動,否則它不會完全啓動。在我的情況下,我的服務A取決於服務B.如果服務A首先啓動,它將向消息總線發出消息,並等待服務B回覆。如果服務B已經啓動,那麼它會直接回復。如果服務B還沒有啓動,一旦啓動它會回覆。然後,當服務A獲得答覆時,它將繼續它的啓動。這樣它總是能夠真正完成首發。

另一個更簡單的方法是,如果服務B關閉,只需在服務A中引發異常。Service Fabric將嘗試在另一個節點中啓動應用程序,並希望服務B啓動。不利的一面是,第一次初始啓動會非常緩慢(因爲它會一直重試,直到出現正確的順序),並且你會看到很多錯誤(但是當所有服務完成啓動時最終都會消失)

+0

謝謝,那些都是好主意!同時我認爲ServiceFabric團隊應該有一個功能來支持這一點。 – user2188649

+0

您還可以從A查詢服務的狀態並保持到B在線https://docs.microsoft.com/en-us/rest/api/servicefabric/get-a-list-of-services – itaysk