使用 CQRS 和事件來源將整體分解為微服務 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 CQRS 和事件來源將整體分解為微服務

由 Rodolfo Jr. Cerrada (AWS)、Dmitry Gulin (AWS) 和 Tabby Ward (AWS) 建立

環境:PoC 或試行

來源:Monolith CRUD 模型

目標:微服務

R 類型:重新架構

工作負載:開放原始碼

技術:現代化;傳訊與通訊;無伺服器

AWS 服務:Amazon DynamoDB;AWS Lambda;Amazon SNS

Summary

此模式結合了兩種模式,同時使用命令查詢責任分離 (CQRS) 模式和事件來源模式。CQRS 模式將命令和查詢模型的責任分開。事件來源模式利用非同步事件驅動的通訊來改善整體使用者體驗。

您可以使用 CQRS 和 Amazon Web Services (AWS) 服務獨立維護和擴展每個資料模型,同時將整體應用程式重構為微服務架構。然後,您可以使用事件來源模式,將資料從命令資料庫同步到查詢資料庫。

此模式使用的範例程式碼包含解決方案 (*.sln) 檔案,您可以使用最新版本的 Visual Studio 開啟該檔案。此範例包含 Reward API 程式碼,可展示 CQRS 和事件來源如何在 AWS 無伺服器和傳統或內部部署應用程式中運作。

若要進一步了解 CQRS 和事件來源,請參閱其他資訊一節。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • Amazon CloudWatch

  • Amazon DynamoDB 資料表

  • Amazon DynamoDB 串流

  • AWS Identity and Access Management (IAM) 存取金鑰和秘密金鑰;如需詳細資訊,請參閱相關資源區段中的影片

  • AWS Lambda

  • 熟悉 Visual Studio

  • 熟悉適用於 Visual Studio 的 AWS Toolkit;如需詳細資訊,請參閱相關資源區段中的適用於 Visual Studio 的 AWS Toolkit 示範影片

產品版本

限制

  • 傳統內部部署應用程式 (ASP.NET 核心 Web API 和資料存取物件) 不會隨附資料庫。不過,它隨附記憶體CustomerData內物件,可作為模擬資料庫。提供的程式碼足以讓您測試模式。

架構

來源技術堆疊

  • ASP.NET 核心 Web API 專案

  • IIS Web 伺服器

  • 資料存取物件

  • CRUD模型

來源架構

在來源架構中,CRUD 模型在一個應用程式中包含命令和查詢介面。如需範例程式碼,請參閱 CustomerDAO.cs(已連接)。

應用程式、服務介面、客戶 CRUD 模型和資料庫之間的連線。

目標技術堆疊

  • Amazon DynamoDB

  • Amazon DynamoDB 串流

  • AWS Lambda

  • (選用) Amazon API Gateway

  • (選用) Amazon Simple Notification Service (Amazon SNS)

目標架構

在目標架構中,命令和查詢介面會分開。下圖中顯示的架構可以使用 API Gateway 和 Amazon SNS 進行擴充。如需詳細資訊,請參閱其他資訊一節。

與無伺服器 Customer Command 和 Customer Query 微服務連線的應用程式。
  1. Command Lambda 函數會在資料庫中執行寫入操作,例如建立、更新或刪除。

  2. 查詢 Lambda 函數會在資料庫中執行讀取操作,例如取得或選取。

  3. 此 Lambda 函數會從命令資料庫處理 DynamoDB 串流,並更新查詢資料庫以進行變更。

工具

工具

  • Amazon DynamoDB – Amazon DynamoDB 是完全受管的 NoSQL 資料庫服務,可提供快速且可預測的效能,並具有無縫的可擴展性。

  • Amazon DynamoDB Streams – DynamoDB Streams 會擷取任何 DynamoDB 資料表中項目層級修改的時間順序。然後,它會在日誌中儲存此資訊最多 24 小時。靜態加密功能會加密 DynamoDB Streams 中的資料。

  • AWS Lambda – AWS Lambda 是一種運算服務,支援執行程式碼,無需佈建或管理伺服器。Lambda 只有在需要時才會執行程式碼,可自動從每天數項請求擴展成每秒數千項請求。只需為使用的運算時間支付費用,一旦未執行程式碼,就會停止計費。

  • AWS 管理主控台 – AWS 管理主控台是一種 Web 應用程式,包含用於管理 AWS 服務的各種服務主控台。

  • Visual Studio 2019 Community Edition – Visual Studio 2019 是整合式開發環境 (IDE)。Community Edition 免費提供給開放原始碼貢獻者。在此模式中,您將使用 Visual Studio 2019 Community Edition 來開啟、編譯和執行範例程式碼。僅供檢視,您可以使用任何文字編輯器或 Visual Studio 程式碼

  • AWS Toolkit for Visual Studio – Visual Studio 的 AWS Toolkit 是 Visual Studio IDE 的外掛程式。AWS Toolkit for Visual Studio 可讓您更輕鬆地開發、偵錯和部署使用 NET 服務的 AWS 應用程式。

Code

範例程式碼已連接。如需部署範例程式碼的指示,請參閱 Epics 章節。

Epics

任務描述所需的技能

開啟解決方案。

  1. 附件區段下載範例原始程式碼 (CQRS-ES Code.zip),然後擷取檔案。

  2. 在 Visual Studio IDE 中,選擇檔案開啟專案解決方案,然後導覽至您擷取原始程式碼的資料夾。

  3. 選擇 AWS.APG.CQRSES.sln,然後選擇開啟。整個解決方案會載入 Visual Studio。

應用程式開發人員

建置解決方案。

開啟解決方案的內容 (按一下滑鼠右鍵) 選單,然後選擇建置解決方案。這將建置和編譯解決方案中的所有專案。它應該可以成功編譯。

Visual Studio Solution Explorer 應會顯示目錄結構。

  • CQRS On-Premises Code Sample 包含使用內部部署 CQRS 的範例。

  • CQRS AWS Serverless 包含使用 CQRS 無伺服器服務的所有 AWS 和事件來源範例程式碼。

應用程式開發人員
任務描述所需的技能

提供憑證。

如果您還沒有存取金鑰,請參閱相關資源區段中的影片。

  1. 在 Solution Explorer 中,展開 CQRS AWS Serverless,然後展開建置解決方案資料夾。

  2. 展開 AwS.APG.CQRSES。建置專案並檢視 Program.cs 檔案。

  3. 捲動至 的頂端Program.cs,並尋找 Program()

  4. YOUR ACCESS KEY 將 取代為您的帳戶存取金鑰,並將 取代YOUR SECRET KEY為您的帳戶私密金鑰。請注意,在生產環境中,您不會硬式編碼您的金鑰。反之,您可以使用 AWS Secrets Manager 來存放和擷取憑證。

應用程式開發人員、資料工程師、DBA

建置專案。

若要建置專案,請開啟 AwS.APG.CQRSES 的內容 (按一下滑鼠右鍵) 選單。建置專案,然後選擇建置

應用程式開發人員、資料工程師、DBA

建置和填入資料表。

若要建置資料表並填入種子資料,請開啟 AwS.APG.CQRSES 的內容 (按一下滑鼠右鍵) 選單。建置專案,然後選擇偵錯啟動新執行個體

應用程式開發人員、資料工程師、DBA

驗證資料表結構和資料。

若要驗證,請導覽至 AWS Explorer,然後展開 Amazon DynamoDB。它應該顯示資料表。開啟每個資料表以顯示範例資料。

應用程式開發人員、資料工程師、DBA
任務描述所需的技能

建置 CQRS 專案。

  1. 開啟解決方案,然後導覽至 CQRS Services/CQRS/Tests AWS 解決方案資料夾。

  2. AWS.APG.CQRSES.CQRSLambda 中。測試專案、開啟 BaseFunctionTest.cs,並將 AccessKeySecretKey 取代為您建立的 IAM 金鑰。

  3. 儲存變更。

  4. 若要編譯和建置測試專案,請開啟專案的內容 (按一下滑鼠右鍵) 選單,然後選擇建置

應用程式開發人員、測試工程師

建置事件來源專案。

  1. 導覽至 CQRS Services/Event Source/Tests AWS 解決方案資料夾。 

  2. AWS.APG.CQRSES.EventSourceLambda 中。測試專案、開啟 BaseFunctionTest.cs,並將 AccessKeySecretKey 取代為您建立的 IAM 金鑰。 

  3. 儲存變更。

  4. 若要編譯和建置測試專案,請開啟專案的內容 (按一下滑鼠右鍵) 選單,然後選擇建置

應用程式開發人員、測試工程師

執行測試。

若要執行所有測試,請選擇檢視測試瀏覽器,然後選擇在檢視中執行所有測試。所有測試都應通過,以綠色核取記號圖示表示。 

應用程式開發人員、測試工程師
任務描述所需的技能

發佈第一個 Lambda 函數。

  1. 在 Solution Explorer 中,開啟 AWS.APGCQRSES.CommandCreateLambda 專案的內容 (按一下滑鼠右鍵) 選單,然後選擇發佈至 AWS Lambda

  2. 選取您要使用的設定檔和您要部署 Lambda 函數的 AWS 區域,以及函數名稱。

  3. 對於其餘欄位,保留預設值,然後選擇下一步

  4. 角色名稱下拉式清單中,選取 AWSLambdaFullAccess

  5. 若要提供您的帳戶金鑰,請選擇新增,然後輸入 AcessKey作為變數,然後輸入 存取金鑰作為值。然後再次選擇新增,輸入 SecretKey 作為變數,輸入 作為秘密金鑰作為值。

  6. 對於其餘欄位,保留預設值,然後選擇上傳。Lambda 測試函數上傳後,會自動出現在 Visual Studio 中。

  7. 針對下列專案重複步驟 1-6:

    • AWS.APG.CQRSES.CommandDeleteLambda

    • AWS.APG.CQRSES.CommandUpdateLambda

    • AWS.APG.CQRSES.CommandAddRewardLambda

    • AWS.APG.CQRSES.CommandRedeemRewardLambda

    • AWS.APG.CQRSES.QueryCustomerListLambda

    • AWS.APG.CQRSES.QueryRewqardLambda

應用程式開發人員、 DevOps 工程師

驗證函數上傳。

(選用) 您可以導覽至 AWS Explorer 並展開 AWS Lambda 來驗證函數是否已成功載入。若要開啟測試視窗,請選擇 Lambda 函數 (按兩下)。

應用程式開發人員、 DevOps 工程師

測試 Lambda 函數。

  1. 其他資訊區段中輸入請求資料,或從測試資料複製範例請求資料。請確定您選取適用於您正在測試之函數的資料。

  2. 若要執行測試,請選擇叫用。回應和任何錯誤都會顯示在回應文字方塊中,而日誌會顯示在日誌文字方塊或 in CloudWatch Logs 中。

  3. 若要驗證資料,請在 AWS Explorer 中選擇 DynamoDB 資料表 (按兩下)。

所有 CQRS Lambda 專案都位於 CQRS AWS Serverless\CQRS\Command Microservice CQRS AWS Serverless\CQRS\Command Microservice 解決方案資料夾下。如需解決方案目錄和專案,請參閱其他資訊區段中的原始程式碼目錄

應用程式開發人員、 DevOps 工程師

發佈其餘函數。

針對下列專案重複上述步驟:

  • AWS.APG.CQRSES.CommandDeleteLambda

  • AWS.APG.CQRSES.CommandUpdateLambda

  • AWS.APG.CQRSES.CommandAddRewardLambda

  • AWS.APG.CQRSES.CommandRedeemRewardLambda

  • AWS.APG.CQRSES.QueryCustomerListLambda

  • AWS.APG.CQRSES.QueryRewqardLambda

應用程式開發人員、 DevOps 工程師
任務描述所需的技能

發佈 Customer and Reward Lambda 事件處理常式。

若要發佈每個事件處理常式,請遵循上述史詩中的步驟。

專案位於 CQRS AWS Serverless\Event Source\Customer EventCQRS AWS Serverless\Event Source\Reward Event 解決方案資料夾下。如需詳細資訊,請參閱其他資訊區段中的原始程式碼目錄

應用程式開發人員

連接事件來源 Lambda 事件接聽程式。

  1. 使用發佈 Lambda 專案時所使用的相同帳戶登入 AWS 管理主控台。

  2. 針對 區域,選取美國東部 1 或您在上一個史詩中部署 Lambda 函數的 區域。

  3. 導覽至 Lambda 服務。

  4. 選取 EventSourceCustomerLambda 函數。

  5. 選擇新增觸發程序

  6. 觸發組態下拉式清單中,選取 DynamoDB

  7. DynamoDB 資料表下拉式清單中,選取 cqrses-customer-cmd

  8. 開始位置下拉式清單中,從 中選取修剪地平線。修整地平線表示 DynamoDB 觸發程序會在最後一個 (未修剪) 串流記錄開始讀取,這是碎片中最舊的記錄。

  9. 選取啟用觸發程序核取方塊。

  10. 對於其餘欄位,保留預設值,然後選擇新增

接聽程式成功連接至 DynamoDB 資料表後,它會顯示在 Lambda 設計工具頁面上。

應用程式開發人員

發佈並連接 EventSourceReward Lambda 函數。

若要發佈和連接 EventSourceReward Lambda 函數,請重複前兩個故事中的步驟,從 DynamoDB 資料表下拉式清單中選取 cqrses-reward-cmd

應用程式開發人員
任務描述所需的技能

測試串流和 Lambda 觸發程序。

  1. 在 Visual Studio 中,導覽至 AWS Explorer。

  2. 展開 AWS Lambda,然後選擇 CommandRedeemReward 函數 (按兩下)。在開啟的函數視窗中,您可以測試函數。

  3. 請求文字方塊中,以 JavaScript 物件記號 (JSON) 格式輸入請求資料。如需範例請求,請參閱其他資訊區段中的測試資料

  4. 選擇調用

應用程式開發人員

使用 DynamodDB 獎勵查詢表驗證。

  1. 開啟 cqrses-reward-query 資料表。

  2. 檢查兌換獎勵的客戶點數。兌換的點數應該從客戶的總彙總點數中減去。

應用程式開發人員

使用 CloudWatch Logs 驗證。

  1. 導覽至 CloudWatch 並選擇日誌群組

  2. /aws/lambda/EventSourceRewardlog 群組包含EventSourceReward觸發程序的日誌。會記錄所有 Lambda 呼叫,包括您在 Lambda 程式碼中context.Logger.LogLineConsole.Writeline 中放置的訊息。

應用程式開發人員

驗證 EventSourceCustomer 觸發程序。

若要驗證EventSourceCustomer觸發條件,請使用EventSourceCustomer觸發條件各自的客戶資料表和 CloudWatch 日誌重複此史詩中的步驟。

應用程式開發人員

相關資源

參考

影片

其他資訊

CQRS和事件來源

CQRS

CQRS 模式會將單一概念操作模型分開,例如資料存取物件單一 CRUD (建立、讀取、更新、刪除) 模型,分為命令和查詢操作模型。命令模型是指變更 狀態的任何操作,例如建立、更新或刪除。查詢模型是指傳回值的任何操作。

具有服務介面、CRUD 模型和資料庫的架構。
  1. Customer CRUD 模型包含下列介面:

    • Create Customer()

    • UpdateCustomer()

    • DeleteCustomer()

    • AddPoints()

    • RedeemPoints()

    • GetVIPCustomers()

    • GetCustomerList()

    • GetCustomerPoints()

隨著您的需求變得更加複雜,您可以從此單一模型方法中轉移。CQRS 使用命令模型和查詢模型來分隔寫入和讀取資料的責任。如此一來,資料就可以獨立維護和管理。明確分離責任後,每個模型的增強功能不會影響另一個模型。這種分離可改善維護和效能,並隨著應用程式的複雜性增加而降低。

應用程式分為命令和查詢模型,共用單一資料庫。
  1. Customer Command 模型中的介面:

    • Create Customer()

    • UpdateCustomer()

    • DeleteCustomer()

    • AddPoints()

    • RedeemPoints()

  2. 客戶查詢模型中的介面:

    • GetVIPCustomers()

    • GetCustomerList()

    • GetCustomerPoints()

    • GetMonthlyStatement()

如需範例程式碼,請參閱原始程式碼目錄

然後 CQRS 模式會解耦資料庫。這種解耦會導致每個服務的整體獨立性,這是微服務架構的主要組成部分。

命令和查詢模型的個別資料庫。

在 CQRS Cloud 中使用 AWS,您可以進一步最佳化每個服務。例如,您可以設定不同的運算設定,或在無伺服器或容器型微服務之間進行選擇。您可以使用 Amazon ElastiCache 取代內部部署快取。如果您有內部部署發佈/訂閱訊息,則可以將其取代為 Amazon Simple Notification Service (Amazon SNS)。此外,您可以利用 pay-as-you-go 定價和各種 AWS 服務,而這些服務僅針對您使用的項目付費。

CQRS 包含下列優點:

  • 獨立擴展 – 每個模型都可以調整其擴展策略,以滿足服務的需求和需求。與高效能應用程式類似,分開讀取和寫入可讓模型獨立擴展,以滿足每個需求。您也可以新增或減少運算資源,以滿足某個模型的可擴展性需求,而不會影響另一個模型。

  • 獨立維護 – 查詢和命令模型的分離可改善模型的可維護性。您可以對一個模型進行程式碼變更和增強功能,而不會影響另一個模型。

  • 安全性 – 將許可和政策套用至個別模型以進行讀取和寫入更容易。

  • 最佳化讀取 – 您可以定義針對查詢最佳化的結構描述。例如,您可以為彙總資料定義結構描述,並為事實資料表定義單獨的結構描述。

  • 整合 –CQRS 非常適合事件型程式設計模型。

  • 受管複雜性 – 對查詢和命令模型的分離適用於複雜的網域。

使用 CQRS 時,請記住下列注意事項:

  • CQRS 模式僅適用於應用程式的特定部分,而非整個應用程式。如果實作在不符合模式的網域上,它可以降低生產力、增加風險並引入複雜性。

  • 此模式最適合具有不平衡讀取和寫入操作的常用模型。

  • 對於需要處理大量讀取的應用程式,例如需要時間的大型報告,CQRS 可讓您選擇正確的資料庫並建立結構描述來儲存彙總的資料。這透過僅處理一次報告資料並將其傾印到彙總的資料表中,來改善讀取和檢視報告的回應時間。

  • 對於寫入密集型應用程式,您可以設定用於寫入操作的資料庫,並允許命令微服務在寫入需求增加時獨立擴展。如需範例,請參閱 AWS.APG.CQRSES.CommandRedeemRewardLambdaAWS.APG.CQRSES.CommandAddRewardLambda 微服務。

事件來源

下一步是在執行命令時,使用事件來源來同步查詢資料庫。例如,請考慮下列事件:

  • 新增客戶獎勵點,要求更新查詢資料庫中的客戶總獎勵點或彙總獎勵點。

  • 命令資料庫中會更新客戶的姓氏,這需要更新查詢資料庫中的代理客戶資訊。

在傳統 CRUD 模型中,您可以鎖定資料直到完成交易,以確保資料的一致性。在來源的情況下,資料會透過發佈一系列事件來同步,訂閱者將使用該事件來更新其個別資料。

事件來源模式可確保並記錄對資料採取的完整動作系列,並透過一連串事件發佈。這些事件代表一組資料變更,該事件的訂閱者必須處理這些變更,以保持其記錄更新。這些事件由訂閱者耗用,同步訂閱者資料庫中的資料。在這種情況下,這是查詢資料庫。

下圖顯示與 CQRS on AWS 搭配使用的事件來源。

使用 CQRS 無伺服器服務的 AWS 和事件來源模式的微服務架構。
  1. Command Lambda 函數會在資料庫中執行寫入操作,例如建立、更新或刪除。

  2. 查詢 Lambda 函數會在資料庫中執行讀取操作,例如取得或選取。

  3. 此 Lambda 函數會從命令資料庫處理 DynamoDB 串流,並更新查詢資料庫以進行變更。您也可以使用此函數將訊息發佈至 Amazon SNS,以便其訂閱者可以處理資料。

  4. (選用) Lambda 事件訂閱者會處理 Amazon SNS 發佈的訊息,並更新查詢資料庫。

  5. (選用) Amazon SNS 會傳送寫入操作的電子郵件通知。

在 AWS 上,DynamoDB Streams 可以同步查詢資料庫。DynamoDB 會以近乎即時的方式擷取 DynamobDB 資料表中項目層級修改的時間順序,並在 24 小時內持久儲存資訊。

啟用 DynamoDB Streams 可讓資料庫發佈一系列事件,讓事件來源模式成為可能。事件來源模式會新增事件訂閱者。事件訂閱者應用程式會耗用事件,並根據訂閱者的責任進行處理。在上圖中,事件訂閱者會將變更推送至 Query DynamoDB 資料庫,以保持資料同步。使用 Amazon SNS、訊息代理程式和事件訂閱者應用程式會保持架構解耦。

事件來源包含下列優點:

  • 交易資料的一致性

  • 可靠的稽核追蹤和動作歷史記錄,可用於監控資料中採取的動作

  • 允許微型服務等分散式應用程式跨環境同步其資料

  • 每當狀態變更時,可靠地發佈事件

  • 重建或重播過去狀態

  • 鬆散耦合的實體,交換事件以從單體應用程式遷移至微服務

  • 減少並行更新所造成的衝突;事件來源可避免直接在資料存放區中更新物件的需求

  • 取消配對任務和事件的靈活性和可擴展性

  • 外部系統更新

  • 管理單一事件中的多個任務

使用事件來源時,請記住下列注意事項:

  • 由於更新來源訂閱者資料庫之間的資料有一些延遲,因此復原變更的唯一方法是將補償事件新增至事件存放區。

  • 實作事件來源具有自其不同程式設計風格以來的學習曲線。

測試資料

成功部署後,請使用下列測試資料來測試 Lambda 函數。

CommandCreate 客戶

{ "Id":1501, "Firstname":"John", "Lastname":"Done", "CompanyName":"AnyCompany", "Address": "USA", "VIP":true }

CommandUpdate 客戶

{ "Id":1501, "Firstname":"John", "Lastname":"Doe", "CompanyName":"Example Corp.", "Address": "Seattle, USA", "VIP":true }

CommandDelete 客戶

輸入客戶 ID 作為請求資料。例如,如果客戶 ID 為 151,請輸入 151 作為請求資料。

151

QueryCustomerList

此為空白。調用時,它將傳回所有客戶。

CommandAddReward

這會為 ID 為 1 (Richard) 的客戶新增 40 點。

{ "Id":10101, "CustomerId":1, "Points":40 }

CommandRedeemReward

這會扣除 ID 為 1 (Richard) 的客戶 15 點。

{ "Id":10110, "CustomerId":1, "Points":15 }

QueryReward

輸入客戶的 ID。例如,在 Richard 輸入 1,在 Arnav 輸入 2,在 Shirley 輸入 3。

2

原始程式碼目錄

使用下表做為 Visual Studio 解決方案目錄結構的指南。 

CQRS 內部部署程式碼範例解決方案目錄

擴展了 Command and Query 服務的解決方案目錄。

客戶 CRUD 模型

CQRS On-Premises Code Sample\CRUD Model\AWS.APG.CQRSES.Word.DAL 專案

Customer CQRS 模型的 CRUD 版本

  • 客戶命令:CQRS On-Premises Code Sample\CQRS Model\Command Microservice\AWS.APG.CQRSES.Command專案

  • 客戶查詢:CQRS On-Premises Code Sample\CQRS Model\Query Microservice\AWS.APG.CQRSES.Query專案

命令和查詢微服務

Command microservice 位於解決方案資料夾 下CQRS On-Premises Code Sample\CQRS Model\Command Microservice

  • AWS.APG.CQRSES.CommandMicroservice ASP.NET Core API 專案是消費者與服務互動的進入點。

  • AWS.APG.CQRSES.Command .NET 核心專案是託管命令相關物件和介面的物件。

查詢微服務位於解決方案資料夾 下CQRS On-Premises Code Sample\CQRS Model\Query Microservice

  • AWS.APG.CQRSES.QueryMicroservice ASP.NET Core API 專案是消費者與服務互動的進入點。

  • AWS.APG.CQRSES.Query .NET 核心專案是託管查詢相關物件和介面的物件。

CQRS AWS Serverless 程式碼解決方案目錄

顯示微服務和事件來源展開的解決方案目錄。

此程式碼是使用 AWS Serverless 服務的內部部署程式碼的 AWS 版本。

在 C# .NET 中 核心,每個 Lambda 函數都以一個 .NET 表示 核心專案。在此模式的範例程式碼中,命令和查詢模型中的每個介面都有一個單獨的專案。

使用 CQRS 服務的 AWS

您可以在 CQRS AWS Serverless\CQRS資料夾中找到使用 CQRS 無伺服器服務的 AWS 根解決方案目錄。範例包括兩個模型:客戶和獎勵。

Customer and Reward 的命令 Lambda 函數位於 CQRS\Command Microservice\CustomerCQRS\Command Microservice\Reward 資料夾下。它們包含下列 Lambda 專案:

  • 客戶命令:CommandCreateLambdaCommandDeleteLambdaCommandUpdateLambda

  • 獎勵命令: CommandAddRewardLambdaCommandRedeemRewardLambda

客戶和獎勵的查詢 Lambda 函數位於 CQRS\Query Microservice\CustomerCQRS\QueryMicroservice\Reward資料夾下。它們包含 QueryCustomerListLambdaQueryRewardLambda Lambda 專案。

CQRS 測試專案

測試專案位於 CQRS\Tests 資料夾下。此專案包含測試指令碼,可自動測試 CQRS Lambda 函數。

使用 AWS 服務的事件來源

下列 Lambda 事件處理常式是由 Customer and Reward DynamoDB 串流啟動,以處理和同步查詢資料表中的資料。

  • EventSourceCustomer Lambda 函數會映射至客戶資料表 (cqrses-customer-cmd) DynamoDB 串流。

  • EventSourceReward Lambda 函數會映射至獎勵資料表 (cqrses-reward-cmd) DynamoDB 串流。

附件

若要存取與本文件相關聯的其他內容,請解壓縮下列檔案: attachment.zip