2016-06-08 14 views
1

根據不同類型的請求,Smart endpoints and dumb pipes怎麼樣?微服務方法中的API vs事件

讀完之後,我想這足以訂閱一些事件並處理它。但是現在我意識到有時你應該已經開放了API(可能不是爲最終用戶,而是API網關等)。這個可以嗎?或者你應該「平息」(轉變爲事件)任何請求,微服務雲?

因此,例如,您有發票和訂單服務。 很明顯,創建訂單時可能會使用發票服務可能使用的事件來創建發票。很明顯,爲了接收最後一個用戶的訂單列表,您可以在訂單服務端使用CQRS,或者甚至只是創建新的服務LastOrders,它將只保留所需數據的投影。但是,如果這個請求轉化爲事件或LastOrders應該爲其提供API並監聽事件以更新它自己的數據庫?

回答

2

我們這樣做是這樣的:

  • 所有的命令發出,如耐用隊列中的消息類型的路由
  • 處理髮生的地方在隔離處理
  • REST POST和PUT僅用於創建應該可以從傳統/外部系統訪問的API
  • 這些「命令」式REST端點僅將命令形式化爲消息並通過消息總線發送它
  • REST GET is perfe ct用於獲取數據,雖然我們可能有一些消息處理程序爲僅能使用消息的長時間運行的進程檢索數據,但命令(消息)處理程序始終發佈有關它們已完成的事件的事件或沒有做過
  • 下游事件處理可以通過訂閱這些事件
+0

感謝您分享您的經驗,我只是一個問題爲所欲爲:你通過API網關封裝GET終點? – user1016265

+0

每個服務都會爲其提供的數據提供自己的一組GET。由於每項服務都有明確的界限和本地存儲,因此您需要獲取所需數據的位置非常明確。 Udi Dahan進一步表明,你實際上必須爲你設計一個客戶服務作爲服務的一部分並分發它,獲得完整的所有權。 –

+0

你能分享一下Udi Dahan的文章嗎?這將是非常有趣的。根據你的回答,你似乎沒有GET GW端點的API GW? – user1016265