Axon框架-构建可扩展性微服务

Axon框架是一个Java微服务框架,他主要作用是帮助你基于DDD来实现微服务架构。

除了DDD,Axon框架还可以帮助你实现CQRS,EDA(Event Driven Architecture)等微服务模式。

这篇文章,我们将教你怎么用Axon框架来实现微服务。

Axon框架和EDA

Axon框架很大程度上是基于领域驱动设计概念而设计的。因此,框架中的一些概念是直接从领域驱动设计术语中提取的。

让我们来看看这些概念:

聚合(Aggregate)

与DDD一样,Axon框架也使用聚合作为应用程序的核心思想。聚合是你的领域对象。换句话说,它就是应用程序存在的理由。

@Aggregate
public class AccountAggregate {

    @AggregateIdentifier
    private String id;

    private double accountBalance;

    private String currency;

    private String status;

    public AccountAggregate() {
    }
}

如果您使用过普通的Spring Boot微服务,您可以将这些聚合与实体类进行比较。

领域事件(Domain-Events)

Axon框架也包含了领域事件的概念。换句话说,任何针对聚合的命令都会创建一个或多个事件。这些事件也称为领域事件。

虽然Axon不要求这样做,但这些领域事件应该密切地反映您的领域对象的行为。

聚合主要处理事件并更改聚合实例的状态。

在下面示例应用程序代码片段中,我们看到了两个由@EventSourcingHandler注解的方法。每当与这些方法相关的事件发生时,这些方法就会被触发(回调):

@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);
}

仓储(Repository)

在DDD术语中,仓储是一个很重要的概念。

仓储是一种抽象,他是一个东西需要持久化存储的抽象(比如mysql,es就是一个具体的仓储)。

在Axon中,聚合是基于可用的数据源持久化的。如果您使用了Spring boot和Axon, Spring Data JPA数据源将自动连接起来,以持久化领域对象。

Axon框架中的消息驱动

Axon的通信主要是消息驱动的。换句话说,在基于axon的应用程序中,各个组件中的相互通信是以消息来进行交互的。

消息包含payload、元数据和唯一标识符。而且,Axon框架中的消息是不可变的。因此,在多线程分布式环境中使用它们是安全的。

在axon中的消息分以下几类:

命令

命令用于改变应用程序的状态。它们是只读的pojo。

发送方向应用程序发出命令,发送方可能不关心命令处理。但是,它可能想知道命令的结果。因此,您可以返回对发送者有用的命令的结果。

事件

事件基本上是描述应用程序中对象发生具体事情(比如买了一件商品)。从域驱动设计的角度来看,事件应用于聚合或实体。

事件通常是命令产生的副作用。因此,如果成功处理了一个命令,通常会在领域实体上发生一个事件或者多个事件(注:命令是你要去做什么,这个还没发生。而事件是因为执行该命令后产生的一个东东,这个东东是已经发生的。比如支付成功,这个就代表是一个事件,代表支付已经完成,这个事实是不可变更的)。

查询

Axon框架的第三种典型消息类型是查询。

查询通常描述对某些信息的请求。换句话说,它可以是聚合的当前状态。

Axon 框架-聚合当前状态

Axon框架当前的版本是4.0.

有了这个版本,它基本上已经不仅仅是一个框架了。Axon 4.0也被正式称为Axon平台。

Axon平台主要由Axon服务器和Axon框架组成。

在微服务体系结构中,Axon服务器充当各种微服务之间的粘合剂。它处理各种应用程序之间的所有通信。

用Axon Server构建分布式应用程序非常简单。

Axon框架的另一个优点是它与SpringBoot的衔接很好。如您所知,springboot是构建微服务的一个非常健壮的框架。springboot让微服务构建速度快,维护简单。

好消息是,你可以使用axon提供的spring boot starter,这几乎不需要任何代码或配置。为此,只需将axon-springboot-starter作为依赖项包含在springboot项目中。


            org.axonframework
            axon-spring-boot-starter
            4.0.3

Axon和Spring Boot一起作为构建基于微服务体系结构的分布式系统的绝佳选择。

Axon框架-例子

此时,您可能想知道如何在应用程序中使用Axon框架。

Axon框架旨在解决微服务设计模式带来的挑战。一些流行的设计模式,如Event Sourcing、CQRS和Saga,这些对于Axon来讲不再是难题。

在Progressive Coder,我们有这些主题的详细代码示例。

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

Event Sourcing with Axon and Spring Boot – Part 1 第一节是介绍事件溯源背后的概念。

Event Sourcing with Axon and Spring Boot – Part 2 第二节我们将讲怎么实现事件溯源。

Event Sourcing with Axon and Spring Boot – Part 3, 第二节我们将对我们的代码进行最后的加工。我们还会测试我们的应用程序。

Axon 框架 和Event Sourcing 及CQRS

vent Sourcing and CQRS with Axon and Spring Boot – Part 1 第一节我们主要讲Event Sourcing 和CQRS怎么配合工作。

In Event Sourcing and CQRS with Axon and Spring Boot – Part 2, 我们将介绍事件溯源和CQRS的实现步骤。我们还测试我们的应用程序。

Axon Server和Spring Boot

Axon服务器有助于扩展分布式微服务。它充当消息交互的枢纽。

在使用Axon和Spring Boot构建微服务时,我们会修改事件溯源和CQRS应用程序以使用Axon Server。我们还将介绍Axon Server提供的各种特性。

使用Axon和Spring Boot实现Saga模式

Saga Pattern Implementation with Axon and Spring Boot – Part 1 第1部分将讨论什么是Saga模式,以及为什么我们需要在特定条件下使用它。我们还将研究Saga实现的类型。

Saga Pattern Implementation with Axon and Spring Boot – Part 2 第2部分将介绍开始Saga实现的过程。

In Saga Pattern Implementation with Axon and Spring Boot – Part 3, 第2部分我们会继续实现saga.,我们也会配置axon服务。

Lastly, in Saga Pattern Implementation with Axon and Spring Boot – Part 4, 第4部分我们会测试我们的saga应用。

总结

对于希望构建可伸缩、高性能和易于维护的分布式微服务的开发人员来说,Axon框架是一个很好的工具。

Axon服务器为Axon框架为添加了另一个维度。

然而,Axon最好的部分之一是它能够很好地与其他微服务框架(如springboot)协同工作。根据我目前所知,越来越多的公司采用这个框架来处理我们的业务。

更多资料你可以参考官方 official website。

你可能感兴趣的:(Axon框架-构建可扩展性微服务)