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和貨物運輸系統微服務應用
