Axon 框架是基於JVM平臺的開源產品,由Allard Buijze於2009年創立。2017年7月,成立了一家獨立公司AxonIQ,專門與Axon產品合作。
Axon 框架的程式遵循基於領域驅動設計(DDD)思想、命令查詢職責分離 (CQRS)、事件驅動架構(Event Driven Architecture,EDA)的架構模式。這些原則的結合,使基於Axon的應用程式更加健壯、適應性更強。
本專欄基於Axon開源框架、DDD領域驅動設計思想、CQRS讀寫分離和事件溯源(Event Sourcing)架構模式來實現DDD經典案例貨物運輸系統(Cargo Tracker Application)。
專欄介紹
Axon是一個輕量級框架,能夠幫助開發者在架構層面構建可擴充套件和可伸縮的應用。
Axon框架提供了一個創新的、功能強大的方式,可以幫助在微服務架構中構建事件驅動的應用。Axon框架源於完善的CQRS(命令查詢職責分離)和Event Sourcing(事件溯源)架構模式,以及DDD領域驅動設計思想。
Axon框架提供了重要的構建塊來幫助快速實現應用開發,如聚合、倉儲、命令匯流排(Command Bus)、事件匯流排(Event Bus)、事件的排程機制等等。此外,Axon提供了對註解的支援,它允許你構建聚合和事件監聽器,而不必包含任何應用程式碼捆綁到Axon框架的特有邏輯。
DDD領域建模思想提出了一些概念、一些模式,讓應用程式碼看起來更貼合業務語義,更貼近業務人員的思維,盡力去消除開發人員和業務人員之間的溝通障礙,另外非常重要的就是它制訂瞭如何劃分業務領域中各種操作邊界的原則,劃定上下文範圍,防止出現盤根錯節的複雜呼叫關係。
Axon框架實現了上述設計思想,建立了一整套讓可以開發人員在專注於業務邏輯的實現,同時又能很簡單地利用高階技術進行靈活處理的框架體系。
專欄大綱
2003年,Eric Evans發表了Domain Driven Design(DDD,領域驅動設計)這一著作,並在書中對領域驅動作出了開創性的理論闡述,至今領域驅動設計已問世十幾年。
近幾年來隨著微服務盛行, ES (Event Sourcing)事件溯源和CQRS (Command Query Responsibility Segregation)讀寫分離也成為了一個越來越流行的概念,使用ES和CQRS好處在此不做贅述,但是也存在頗多弊端,比如事件數量巨大、回溯狀態需要提前預熱、缺少成熟的框架支撐等。在這種情況下,2009年Allard Buijze在JVM平臺開源了Axon Framework用來解決此問題,簡單說來Axon就是整合了DDD、ES和CQRS於一身,落地實現的一套框架方案,併成立了一家公司Axon IQ,專門與Axon產品合作。
本技術專欄以貨物運輸系統(Cargo Tracker Application )為示例,我們將基於Axon框架和DDD領域驅動設計思想,採用CQRS命令查詢職責分離和事件溯源(Event Sourcing)架構模式來實現。
Axon開源框架忠實地貫徹了DDD領域建模思想,有助於提升應用專案長遠可維護性和可擴充套件性。
主要內容如下:
-
Axon框架快速入門和DDD專案實踐
-
基於CQRS命令查詢職責分離和Event Sourcing事件溯源的架構設計
-
Axon框架詳細介紹:領域模型(Domain Model)元件和排程模型(Dispatch Model)元件
-
Axon框架詳細介紹:基礎設施元件Axon Server和控制檯演示
-
基於Axon框架的Spring Boot微服務應用的設計和建立
-
基於Axon框架的Spring Boot微服務應用包結構設計
-
試執行基於Axon框架和CQRS/ES模式的預訂微服務應用
-
基於Axon框架實現領域模型:聚合Aggregate和狀態State
-
基於Axon框架實現領域模型:命令和命令處理程式
-
基於Axon框架實現領域模型:建立事件模型和釋出事件
-
基於Axon框架實現領域模型:聚合狀態維護(State Maintenance)
-
基於Axon框架實現領域模型:AssignRouteToCargoCommand命令處理程式
-
基於Axon框架實現領域模型:ChangeDestinationCommand命令處理程式
-
CQRS架構中的查詢端:聚合投影的資料儲存和投影類的實現
-
CQRS架構中的查詢端:查詢類和查詢處理程式的實現
-
基於Axon框架實現領域模型:Saga分散式事務快速入門
-
基於Axon框架實現領域模型:Saga分散式事務的實現
-
基於Axon框架實現領域服務:REST API和事件處理程式
-
基於Axon框架實現應用服務(Application Service)
-
領域驅動設計-專案整體架構和微服務應用包結構詳細介紹
-
領域驅動設計-預訂微服務應用中領域模型的包結構和程式碼分析
-
基於Axon框架和DDD設計思想的微服務應用程式碼分析
-
領域驅動設計-啟動Axon Server和貨物運輸系統微服務應用