考慮以下微服務的在線商店項目:
用戶服務保留有關商店的用戶帳戶數據(包括姓,名,電子郵件地址等「)微服務架構:跨業務的數據共享
採購服務跟蹤用戶購買的細節。
每項服務都提供了用於查看和管理相關實體的UI。 購買服務索引頁面列出購買。每個採購項目應具有以下字段:
id,採購用戶全名,採購項目標題和價格。
此外,作爲索引頁面的一部分,我希望有一個搜索框讓商店經理通過購買用戶名來搜索購物。
我不清楚如何找回購買服務不支持的數據 - 例如:用戶的全名。 當嘗試通過購買用戶名執行更復雜的事情(如搜索購買)時,問題變得更糟。
我想通過在用戶創建時廣播某種事件並在購買服務端只保存相關用戶屬性,我可以明顯解決這個問題。在我看來,這遠非理想。當你有數百萬用戶時,你如何處理這個問題?你會在每個使用用戶數據的服務中創建數百萬條記錄嗎?
另一個顯而易見的選擇是在用戶服務端公開一個API,該API根據給定的ID返回用戶詳細信息。這意味着購買服務中的每個頁面加載,我都必須撥打用戶服務以獲取正確的用戶名稱。不理想,但我可以忍受它。
如何根據用戶名實現購買搜索?那麼我總是可以在接收查詢條件的用戶服務端公開另一個API端點,在用戶服務中對用戶名執行文本搜索,然後返回符合條件的所有用戶詳細信息。在採購服務中,將相關ID映射回正確的名稱並在頁面中顯示。這種方法也不理想。
我錯過了什麼嗎?是否有另一種方法來實現上述?也許我面臨這個問題的事實是一種代碼味道?很想聽聽其他解決方案。
我對這個問題有點困惑。字體結束應用程序應該與服務分開。您應該能夠在不更改服務的情況下進行前端應用程序更改。 對於購買屏幕,應該調用購買服務和用戶服務來獲取屏幕的數據。另外一個單獨的API可以放在服務的前面,它將調用這兩個服務,然後將數據返回到屏幕。 看一看圖[這裏](http://martinfowler.com/articles/microservices.html#DecentralizedDataManagement),它顯示了它應該如何工作。 – 2015-05-28 13:27:10
以下是API模式:http://microservices.io/patterns/apigateway.html – 2015-05-28 13:42:59