Axon框架-構(gòu)建可擴(kuò)展性微服務(wù)

Axon框架是一個(gè)Java微服務(wù)框架,他主要作用是幫助你基于DDD來實(shí)現(xiàn)微服務(wù)架構(gòu)。

除了DDD,Axon框架還可以幫助你實(shí)現(xiàn)CQRS,EDA(Event Driven Architecture)等微服務(wù)模式。

這篇文章,我們將教你怎么用Axon框架來實(shí)現(xiàn)微服務(wù)。

Axon框架和EDA

Axon框架很大程度上是基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)概念而設(shè)計(jì)的。因此,框架中的一些概念是直接從領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)術(shù)語中提取的。

讓我們來看看這些概念:

聚合(Aggregate)

與DDD一樣,Axon框架也使用聚合作為應(yīng)用程序的核心思想。聚合是你的領(lǐng)域?qū)ο?。換句話說,它就是應(yīng)用程序存在的理由。

@Aggregate
public class AccountAggregate {

    @AggregateIdentifier
    private String id;

    private double accountBalance;

    private String currency;

    private String status;

    public AccountAggregate() {
    }
}

如果您使用過普通的Spring Boot微服務(wù),您可以將這些聚合與實(shí)體類進(jìn)行比較。

領(lǐng)域事件(Domain-Events)

Axon框架也包含了領(lǐng)域事件的概念。換句話說,任何針對(duì)聚合的命令都會(huì)創(chuàng)建一個(gè)或多個(gè)事件。這些事件也稱為領(lǐng)域事件。

雖然Axon不要求這樣做,但這些領(lǐng)域事件應(yīng)該密切地反映您的領(lǐng)域?qū)ο蟮男袨椤?/p>

聚合主要處理事件并更改聚合實(shí)例的狀態(tài)。

在下面示例應(yīng)用程序代碼片段中,我們看到了兩個(gè)由@EventSourcingHandler注解的方法。每當(dāng)與這些方法相關(guān)的事件發(fā)生時(shí),這些方法就會(huì)被觸發(fā)(回調(diào)):

@EventSourcingHandler
protected void on(AccountCreatedEvent accountCreatedEvent){
        this.id = accountCreatedEvent.id;
        this.accountBalance = accountCreatedEvent.accountBalance;
        this.currency = accountCreatedEvent.currency;
        this.status = String.valueOf(Status.CREATED);

        AggregateLifecycle.apply(new AccountActivatedEvent(this.id, Status.ACTIVATED));
}

@EventSourcingHandler
protected void on(AccountActivatedEvent accountActivatedEvent){
        this.status = String.valueOf(accountActivatedEvent.status);
}

倉(cāng)儲(chǔ)(Repository)

在DDD術(shù)語中,倉(cāng)儲(chǔ)是一個(gè)很重要的概念。

倉(cāng)儲(chǔ)是一種抽象,他是一個(gè)東西需要持久化存儲(chǔ)的抽象(比如mysql,es就是一個(gè)具體的倉(cāng)儲(chǔ))。

在Axon中,聚合是基于可用的數(shù)據(jù)源持久化的。如果您使用了Spring boot和Axon, Spring Data JPA數(shù)據(jù)源將自動(dòng)連接起來,以持久化領(lǐng)域?qū)ο蟆?/p>

Axon框架中的消息驅(qū)動(dòng)

Axon的通信主要是消息驅(qū)動(dòng)的。換句話說,在基于axon的應(yīng)用程序中,各個(gè)組件中的相互通信是以消息來進(jìn)行交互的。

消息包含payload、元數(shù)據(jù)和唯一標(biāo)識(shí)符。而且,Axon框架中的消息是不可變的。因此,在多線程分布式環(huán)境中使用它們是安全的。

在axon中的消息分以下幾類:

命令

命令用于改變應(yīng)用程序的狀態(tài)。它們是只讀的pojo。

發(fā)送方向應(yīng)用程序發(fā)出命令,發(fā)送方可能不關(guān)心命令處理。但是,它可能想知道命令的結(jié)果。因此,您可以返回對(duì)發(fā)送者有用的命令的結(jié)果。

事件

事件基本上是描述應(yīng)用程序中對(duì)象發(fā)生具體事情(比如買了一件商品)。從域驅(qū)動(dòng)設(shè)計(jì)的角度來看,事件應(yīng)用于聚合或?qū)嶓w。

事件通常是命令產(chǎn)生的副作用。因此,如果成功處理了一個(gè)命令,通常會(huì)在領(lǐng)域?qū)嶓w上發(fā)生一個(gè)事件或者多個(gè)事件(注:命令是你要去做什么,這個(gè)還沒發(fā)生。而事件是因?yàn)閳?zhí)行該命令后產(chǎn)生的一個(gè)東東,這個(gè)東東是已經(jīng)發(fā)生的。比如支付成功,這個(gè)就代表是一個(gè)事件,代表支付已經(jīng)完成,這個(gè)事實(shí)是不可變更的)。

查詢

Axon框架的第三種典型消息類型是查詢。

查詢通常描述對(duì)某些信息的請(qǐng)求。換句話說,它可以是聚合的當(dāng)前狀態(tài)。

Axon 框架-聚合當(dāng)前狀態(tài)

Axon框架當(dāng)前的版本是4.0.

有了這個(gè)版本,它基本上已經(jīng)不僅僅是一個(gè)框架了。Axon 4.0也被正式稱為Axon平臺(tái)。

Axon平臺(tái)主要由Axon服務(wù)器和Axon框架組成。

在微服務(wù)體系結(jié)構(gòu)中,Axon服務(wù)器充當(dāng)各種微服務(wù)之間的粘合劑。它處理各種應(yīng)用程序之間的所有通信。

用Axon Server構(gòu)建分布式應(yīng)用程序非常簡(jiǎn)單。

Axon框架的另一個(gè)優(yōu)點(diǎn)是它與SpringBoot的銜接很好。如您所知,springboot是構(gòu)建微服務(wù)的一個(gè)非常健壯的框架。springboot讓微服務(wù)構(gòu)建速度快,維護(hù)簡(jiǎn)單。

好消息是,你可以使用axon提供的spring boot starter,這幾乎不需要任何代碼或配置。為此,只需將axon-springboot-starter作為依賴項(xiàng)包含在springboot項(xiàng)目中。

<dependency>
            <groupId>org.axonframework</groupId>
            <artifactId>axon-spring-boot-starter</artifactId>
            <version>4.0.3</version>
</dependency>

Axon和Spring Boot一起作為構(gòu)建基于微服務(wù)體系結(jié)構(gòu)的分布式系統(tǒng)的絕佳選擇。

Axon框架-例子

此時(shí),您可能想知道如何在應(yīng)用程序中使用Axon框架。

Axon框架旨在解決微服務(wù)設(shè)計(jì)模式帶來的挑戰(zhàn)。一些流行的設(shè)計(jì)模式,如Event Sourcing、CQRS和Saga,這些對(duì)于Axon來講不再是難題。

在Progressive Coder,我們有這些主題的詳細(xì)代碼示例。

Event Sourcing(事件溯源) 和Axon框架一起配合

Event Sourcing with Axon and Spring Boot – Part 1 第一節(jié)是介紹事件溯源背后的概念。

Event Sourcing with Axon and Spring Boot – Part 2 第二節(jié)我們將講怎么實(shí)現(xiàn)事件溯源。

Event Sourcing with Axon and Spring Boot – Part 3, 第二節(jié)我們將對(duì)我們的代碼進(jìn)行最后的加工。我們還會(huì)測(cè)試我們的應(yīng)用程序。

Axon 框架 和Event Sourcing 及CQRS

vent Sourcing and CQRS with Axon and Spring Boot – Part 1 第一節(jié)我們主要講Event Sourcing 和CQRS怎么配合工作。

In Event Sourcing and CQRS with Axon and Spring Boot – Part 2, 我們將介紹事件溯源和CQRS的實(shí)現(xiàn)步驟。我們還測(cè)試我們的應(yīng)用程序。

Axon Server和Spring Boot

Axon服務(wù)器有助于擴(kuò)展分布式微服務(wù)。它充當(dāng)消息交互的樞紐。

在使用Axon和Spring Boot構(gòu)建微服務(wù)時(shí),我們會(huì)修改事件溯源和CQRS應(yīng)用程序以使用Axon Server。我們還將介紹Axon Server提供的各種特性。

使用Axon和Spring Boot實(shí)現(xiàn)Saga模式

Saga Pattern Implementation with Axon and Spring Boot – Part 1 第1部分將討論什么是Saga模式,以及為什么我們需要在特定條件下使用它。我們還將研究Saga實(shí)現(xiàn)的類型。

Saga Pattern Implementation with Axon and Spring Boot – Part 2 第2部分將介紹開始Saga實(shí)現(xiàn)的過程。

In Saga Pattern Implementation with Axon and Spring Boot – Part 3, 第2部分我們會(huì)繼續(xù)實(shí)現(xiàn)saga.,我們也會(huì)配置axon服務(wù)。

Lastly, in Saga Pattern Implementation with Axon and Spring Boot – Part 4, 第4部分我們會(huì)測(cè)試我們的saga應(yīng)用。

總結(jié)

對(duì)于希望構(gòu)建可伸縮、高性能和易于維護(hù)的分布式微服務(wù)的開發(fā)人員來說,Axon框架是一個(gè)很好的工具。

Axon服務(wù)器為Axon框架為添加了另一個(gè)維度。

然而,Axon最好的部分之一是它能夠很好地與其他微服務(wù)框架(如springboot)協(xié)同工作。根據(jù)我目前所知,越來越多的公司采用這個(gè)框架來處理我們的業(yè)務(wù)。

更多資料你可以參考官方 official website

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容