2017-01-24 22 views
0

許多書籍和文章指出,微服務中的週期通常很糟糕,因爲它們引入了相互依賴性,導致更大的依賴性,版本化和部署問題需要解決。Restful Microservices的雙向溝通​​,通知是否合理?

然而,假設有服務一個,呼叫服務,還假設,因爲此調用將開始漫長的計算,所以我們不應該做這個調用同步。一種可能的解決方案是服務A將資源url傳遞給服務B,以便在有時B計算結果時,它應將結果發佈到遵循寧靜範式的給定url。所以這個最終資源就像某種回調。這種方法確實可以解決我的問題,但正如上面的段落中所解釋的那樣,它引入了循環依賴。這個可以嗎?如果不是,你會如何解決同樣的問題?

回答

1

它可以,但不是一個好的設計,因爲你可以看到依賴是相當硬編碼的。

您可以選擇使用將請求消息放入一個隊列並將響應消息放入另一個隊列的消息。

通過這種方式,您的溝通將是異步的,鬆散耦合的,並且任何服務都不需要非常明確地瞭解彼此及其位置/地址。 這也是反應式宣言推薦的溝通方式。

+0

對於這種情況下使用兩個隊列聽起來有點矯枉過正。在問題註釋中,只有A知道B的地址。所以這不是一個大問題。此外,您的解決方案隊列必須知道這些地址,除非服務本身執行輪詢(這是我想避免的)。沒有那麼確信... –

+1

發送者和接收者到隊列只需要知道隊列的名稱。在隊列的偵聽端沒有需要輪詢的消息接收器,儘管您可以執行輪詢機制,但它本來是基於事件的,但它不是這種意圖。 因此,沒有人會知道或不需要知道發件人或接收人地址的任何地址;但只有隊列名稱和消息服務器的位置,例如JMS實施服務器。 – hB0