我正在開發一個將單一的web應用程序轉換爲微服務的個人項目(每個服務都有自己的數據庫)。互通微服務 - 如何?
此時整體後端由NodeJS製成並能夠回覆REST請求。 當我開始將應用程序分成多個服務時,我遇到了下一個問題:如何使它們之間的通信很好?
首先我試圖用REST調用下一個例子: 「註冊服務」,以堅持它插入有趣的事情到它的數據庫,然後向前(HTTP POST)的用戶信息的「用戶服務」進入「用戶」數據庫。 從這個例子我們有2個服務,因此2個數據庫。
我意識到在這個時刻這不是一個好選擇。因爲我的「註冊服務」取決於「用戶服務」。它們有些耦合,這是微服務概念的反模式(從我讀到的內容來看)。
第二個想法是使用類似RabbitMQ的消息中介。 「註冊服務」仍將有趣的事情插入到自己的數據庫中,並將用戶信息作爲數據發佈在隊列中。 「用戶服務」使用此消息並將數據保存到其「用戶」數據庫中。通過使用這個概念,這兩種服務都是完全孤立的,並且可能是一個好主意。
但是,如何將響應發送給客戶端(誰提出了「註冊服務」的請求)。有了第一個想法,我們可以發送「200,一切都好!」或400.這不是問題。有了第二個想法,我們不知道消費者(「用戶服務」)是否堅持用戶數據,那麼我需要回復客戶端?
我有與Web應用程序的商店端相同的問題。客戶將他想購買的產品發佈到「訂購服務」。如果用戶有足夠的錢,這個人需要檢查他已經進入「用戶服務」的虛擬貨幣,然後將產品細節轉發到「交付服務」。如何用完全隔離的服務做到這一點?
我不想使用客戶端的http請求時間在消息代理上進行異步請求/回覆。
我希望你們中的一些人能夠啓發我。
閱讀此:http://stackoverflow.com/questions/30213456/transactions-across-rest-microservices –