Axon第2部分:结构、Spring Boot集成和服务器设置

650 阅读4分钟

这是正在进行的解释Axon框架的系列博客的第二部分。这篇博客将带你领先一步,帮助你了解更多关于需要遵循的应用程序目录结构。同时,我们将了解Axon的spring boot集成。此外,本博客将有一个快速的Axon服务器设置指南。

先决条件

  • 通过Axon第一部分--Axon框架介绍(强烈建议)。
  • 微服务
  • 命令查询责任隔离(CQRS)
  • 命令、事件和查询
  • 领域驱动的设计
  • 事件源
  • SAGA设计模式

在Axon第一部分--Axon框架介绍中,我们已经看到了如何快速建立一个Axon应用程序。因此,在这篇博客中,我们将进一步了解Axon应用程序的包/目录结构、Axon服务器的快速设置以及Axon与SpringBoot的集成。

Axon应用程序的结构

首先,让我们深入了解pom.xml-中需要的所有依赖项:

<dependency>
            <groupId>org.axonframework</groupId>
            <artifactId>axon-spring-boot-starter</artifactId>
            <version>${axon.version}</version>
     </dependency>

<dependency>
            <groupId>org.axonframework</groupId>
            <artifactId>axon-test</artifactId>
            <version>${axon.version}</version>
            <scope>test</scope>
    </dependency>

以上是pom.xml文件中对Axon的主要依赖。

目录结构

为了设置Axon应用程序,需要遵循一定的目录结构

因此,由于我们正在做CQRS,我们将隔离命令并创建一个幻灯片,所以我们将有一个专门的命令包。

我们也会有一个专门的查询包。

此外,当我们在做CQRS时,与这两个组件进行通信的最简单的方法是通过专用的消息、命令、查询和事件。因为它们是进出你的应用程序的唯一东西,所以有应用程序的coreapi。我们还将在一个不同的包中专用,因为这是我们想与大家分享的包,因为它是API。

Spring Boot集成

Axon框架也提供对Spring的支持。Spring可以通过编程方式进行配置。因此,在类的路径上不需要Spring。Spring注解在减轻Spring配置工作中起着重要作用。Axon提供了spring boot启动器。因此,在自动配置方面没有任何麻烦。

自动配置

Axon的Spring Boot自动配置是迄今为止最酷的选择,可以在配置Axon装备的过程中获得。仅仅通过说明依赖关系到 **axon-spring-boot-starter**.Axon将自动配置基础设施齿轮(命令总线、事件总线、查询总线),以及运行和储备聚合体和传奇所需的任何模块。

axon-spring-boot-starter 在安排启动器时跟踪通用的Spring boot协议。这取决于axon-spring-boot-autoconfigure ,它拥有Axon自动配置的具体实现。一旦Axon Spring Boot应用程序启动,它将在classpath 中寻找一个名为spring.factories 的文件。该文件位于axon-spring-boot-autoconfigure 模块的META-INF 目录中。

快速Axon服务器设置指南

什么是Axon服务器?

Axon服务器是AxonIQ的产品。这有两类,一类是Axon Server标准版,另一类是Axon Serve企业版。标准版是在AxonIQ开源许可下提供的。而企业版是具有所有特性和功能的商业版。

安装

有两种安装方式:

  1. 本地安装
  2. 使用docker来安装

如何在本地安装?

前提条件:

机器必须有 java 8或11

下载Axon Server SE/EE的步骤

第1步

下载Axon服务器的二进制文件,可在链接中找到。

第2步

复制下面的命令到一个目录

axonserver.jar/axonserver-cli.jar

第3步

运行Axon Server SE,进入提取文件的目录。运行下面的命令:

$ ./axonserver.jar
     _                     ____
    / \   __  _____  _ __ / ___|  ___ _ ____   _____ _ __
   / _ \  \ \/ / _ \| '_ \\___ \ / _ \ '__\ \ / / _ \ '__|
  / ___ \  >  < (_) | | | |___) |  __/ |   \ V /  __/ |
 /_/   \_\/_/\_\___/|_| |_|____/ \___|_|    \_/ \___|_|
 Standard Edition                        Powered by AxonIQ

NOTE: This will start Axon Server SE using the default ports - 8024 for HTTP / 8124 for gRPC.

此外,Axon服务器也可以在开发模式下打开,只需使用下面的命令:

axoniq.axonserver.devmode.enabled=true

如何将Axon服务器作为Docker图像运行?

Axon服务器为我们提供了作为Docker镜像使用的功能,因此我们不需要在本地下载它。

作为Docker镜像运行Axon Server SE的步骤

所以,Axon服务器带有一个可使用的docker镜像。要将Axon服务器作为docker镜像运行,应执行以下命令:

$ docker run -d --name  -p 8024:8024 -p 8124:8124 axoniq/axonserver

另一种运行Axon服务器的方法是通过Docker Compose

下面是Axon Server SE的docker compose文件。

version: '3.3'
services:
  axonserver:
    image: axoniq/axonserver
    hostname: axonserver
    volumes:
      - axonserver-data:/data
      - axonserver-events:/eventdata
      - axonserver-config:/config:ro
    ports:
      - '8024:8024'
      - '8124:8124'
      - '8224:8224'
    networks:
      - axon-demo

volumes:
  axonserver-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ${PWD}/axonserverse/data
  axonserver-events:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ${PWD}/axonserverse/events
  axonserver-config:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ${PWD}/axonserverse/config

networks:
  axon-demo:

在完成了Docker Compose文件后,只需运行下面的命令:

$ docker-compose up
Creating network "docker-compose_axon-demo" with the default driver
Creating volume "docker-compose_axonserver-data" with local driver
Creating volume "docker-compose_axonserver-events" with local driver
Creating volume "docker-compose_axonserver-config" with local driver
Creating docker-compose_axonserver_1 ... done
Attaching to docker-compose_axonserver_1
axonserver_1  |      _                     ____
axonserver_1  |     / \   __  _____  _ __ / ___|  ___ _ ____   _____ _ __
axonserver_1  |    / _ \  \ \/ / _ \| '_ \\___ \ / _ \ '__\ \ / / _ \ '__|
axonserver_1  |   / ___ \  >  < (_) | | | |___) |  __/ |   \ V /  __/ |
axonserver_1  |  /_/   \_\/_/\_\___/|_| |_|____/ \___|_|    \_/ \___|_|
axonserver_1  |  Standard Edition                        Powered by AxonIQ