簡體   English   中英

事件驅動的微服務ID生成

[英]event-driven microservices id generation

我是微服務的新手。 我正在嘗試創建一個微服務架構,其中有一個API網關應該只接收請求並相應地創建一個事件。 然后,該事件將被微服務攔截,該微服務將所需的數據存儲到數據庫中。

也許我在設計上犯了一個錯誤,但是我希望在客戶端調用API網關后,請求將異步進行,並且不能保證數據的一致性。

那么客戶端如何知道資源是否已創建及其ID?

客戶也應該聽事件嗎?

這是正確的體系結構還是我走錯了路?

預先感謝您的評論!

注意:我沒有使用任何結構化框架。 我喜歡它們,但這主要是一個實驗,我希望一切都保持簡單。 無論如何,如果您的建議涉及spring或任何Java框架,我都會開放。

(編輯)

另一個有趣的觀點。 讓我們假設API響應是異步的,如果客戶端必須插入由兩個資源(由其自己的ID標識)構成的聚合數據,那么如何通過事件驅動的體系結構來實現此目的?

在同步調用和異步調用之間有兩種選擇,后者允許更靈活的體系結構,因此如果您要這樣做,則可以選擇它。

也許我在設計上犯了一個錯誤,但是我希望在客戶端調用API網關后,請求將異步進行,並且不能保證數據的一致性。

由於調用是異步的,因此最終將具有一致性

那么客戶端如何知道資源是否已創建及其ID?

不知道 我看到兩個選擇:

  1. 客戶端生成ID,更可取的GUIDs (或任何無狀態的唯一ID),這是實現高可伸縮性的首選方法。 然后,客戶端使用服務器返回的GUIDHATEOAS URL輪詢服務器以檢查資源的狀態。
  2. 客戶端發送的請求沒有預先存在的ID,但是服務器返回了一個端點URL,客戶端可以在其中輪詢命令狀態,可能使用唯一的命令ID(例如: /commands/1234-abcd-5678-efgh/status ); 執行該命令后,服務器將返回創建的資源ID或資源URL(如果具有RESTFUL服務/ HATEOAS

分開的事件命令

事件是過去發生的事情,將事件發送到服務器僅會收到一個確定的響應。

命令是您需要響應時使用的東西,例如id或創建用戶時,需要檢查電子郵件是否已在使用中。 然后,該命令發送一個帶有用戶信息的“用戶創建”事件,並將用戶的ID返回給運行該命令的用戶(例如,前端客戶端)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM