将eventstore与Axon Framework 3和Spring Boot一起使用

问题描述 投票:1回答:1

我正在尝试实现一个简单的分布式应用程序,我想将所有事件保存到事件存储中。出于这个原因,正如Axon here的“文档”中所建议的,我想使用Mysql作为事件存储。

由于我对Spring没有太多经验,所以我无法理解如何使它工作。我有两个单独的服务,一个用于命令端,一个用于查询端。由于我计划提供更多服务,因此我想知道如何配置它们以使用外部事件存储(不存储在任何这些服务中)。

对于命令和事件的分发,我使用的是RabbitMQ:

@Bean
public org.springframework.amqp.core.Exchange exchange() {
    return ExchangeBuilder.fanoutExchange("AxonEvents").build();
}

@Bean
public Queue queue() {
    return QueueBuilder.durable("AxonEvents").build();
}

@Bean
public Binding binding() {
    return BindingBuilder.bind(queue()).to(exchange()).with("*").noargs();
}


@Autowired
public void configure(AmqpAdmin admin)
{
    admin.declareExchange(exchange());
    admin.declareQueue(queue());
    admin.declareBinding(binding());
}

这将在本地运行的RabbitMQ实例上创建所需的队列(使用默认用户名和密码)。

我的问题是:我如何配置Axon使用mysql作为事件存储?

spring-boot microservices cqrs axon
1个回答
1
投票

由于参考指南目前没有具体说明,我将在此指出。目前,在分发Axon应用程序或将Axon应用程序分离为(微)服务时,您大致有两种方法:

  1. 使用完整的开源方法
  2. 使用AxonHub / AxonDb

采用方法2,您可以在开发人员环境中执行,您只需运行AxonHub和AxonDb并将它们配置到您的应用程序。就是这样,你做完了;您可以扩展您的应用程序,并根据需要路由所有消息。

但是,如果您想采用路线1,则必须提供多种配置

首先,您声明使用RabbitMQ来路由命令和事件。实际上,框架不仅仅允许使用RabbitMQ来路由命令。请注意它是分发EventMessages的解决方案,而不是CommandMessages。我建议使用JGroupsSpring Cloud在开源场景中路由你的命令(我已经添加了关于为JGroups和Spring Cloud分发CommandBus的参考指南页面的链接)。

要分发您的活动,您可以采取三种方法:

  1. 为您的活动使用共享数据库。
  2. 使用AMQP将您的平均发送到不同的实例。
  3. 使用Kafka将您的平均发送到不同的实例。

我个人在开始申请时的偏好是从一个整体开始,必要时分开。我认为“进化微服务”一词很好地捕捉到了这一点。

如果你使用Axon支持的消息传递范例,那么如何在病房之后将命令端从查询端拆分出来应该非常简单。如果您另外使用AxonHub来分发您的消息,那么您几乎已经完成了。

最后,我没有从您的问题中找到非常确切的请求。这是否能为您提供所需的信息,@ Federico Ponzi?

Update

在考虑了一些之后,我认为你的解决方案非常简单。您正在使用Spring Boot,并且您想要设置EventStore以使用MySQL。要让Axon设置正确的EventStorageEngine(封面下用于读/写事件的infra组件),您只需添加对spring-boot-starter-data-jpa的依赖。 Axon它的自动配置将在该场景中自动注意到您的类路径上有Spring Data JPA,因此将设置JpaEventStorageEngine

© www.soinside.com 2019 - 2024. All rights reserved.