当前位置: 首页 > 知识库问答 >
问题:

将eventstore与Axon Framework 3和Spring

公良鸿风
2023-03-14

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

由于我对Spring没有太多的经验,我不知道如何让它工作。我将有两个独立的服务,一个用于命令端,一个用于查询端。由于我计划有更多的服务,我想知道如何配置它们来使用外部事件存储(不存储在任何这些服务中)。

@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作为事件存储?

共有1个答案

谷出野
2023-03-14

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

  1. 使用完全开放源码方法
  2. 使用AxonHub/axondb

采用方法2(您可以在开发人员环境中完成),您只需运行AxonHub和AxonDb,并将它们配置到您的应用程序中。就这样,你搞定了;您可以扩展应用程序,并且所有消息都按需要进行路由。

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

要分发事件,可以采用三种方法:

  1. 对事件使用共享数据库。
  2. 使用AMQP将evens发送到不同的实例。
  3. 使用Kafka将evens发送到不同的实例。

经过一番思考,我认为你的解决办法很简单。您正在使用Spring Boot,并且希望设置EventStore以使用MySQL。要让Axon设置正确的EventStorageEngine(下面用来读/写事件的infra组件),只需添加对spring-boot-starter-data-jpa的依赖关系。Axon IT的自动配置将在该场景中自动注意到类路径上有Spring数据JPA,因此将设置JPAEventStorageEngine

 类似资料:
  • EventStore 是一种开源的函数式数据库,用于存储不可变事件和对事件流进行复杂的事件处理。与此领域的其他工具不同,EventStore 将事件流展现为 Atmo 集合,因此不需要使用消息总线之类的特殊基础设施或高度专门化的客户端。

  • 我目前正在使用ElasticSearch和EventStore学习CQRS实现。因此,我决定使用EventStore将大量事件流保存到EventStore中,并使用弹性搜索从EventStore中查询Data/CurrentState数据。 我的问题是, 提前谢了。

  • 问题内容: 我正在构建一个新的应用程序,该应用程序通过java配置而不是xml配置spring。此应用程序依赖于使用xml样式配置的模块。当我尝试启动我的应用程序时,出现以下错误: 该bean应该在模块的applicationContext.xml中声明。处理此问题的正确方法是什么?我尝试简单地添加它,就像我在应用程序的web.xml中将应用程序上下文串联在一起时一样: 但是我仍然遇到同样的错误。

  • 问题内容: 我正在使用Hibernate Validator 4.0.2,Spring 3.0和Hibernate 3.3.2(据我所知,是JPA2之前的版本)作为JPA 1提供程序。 我发现将Validator集成到MVC层很容易(这是可行的),但是看不到如何将验证器自动集成到JPA entityManager(JPA 1)中。 基本上,我有一些实体将保留下来,但它们不是来自Web层,因此尚未经

  • 我目前正在使用Wink 1.1.1和Spring 3.1.2迁移一个Java应用程序从WAS7到WAS8.5.5。我正在尝试使用Wink 8.5中可用的本地Wink集成,而不是使用我们目前在Wink 7中使用的单独Wink罐。 我得到了一个错误的服务器启动,看起来像这样: 原因:java。lang.ClassNotFoundException:org。阿帕奇。眨眼服务器内部的登记处。java上的R

  • 问题内容: 我们将Robotium与一起用于测试。虽然如此,我们想用Robotium代替Espresso,但是我们仍然有一些疑问,因为我们有一台装有Jenkins的CI机器。 Espresso使用的是Robotium ,而Robotium使用的是第一个,我们希望能够同时使用两个测试框架。可能吗?我们如何在文件中指定呢?我们如何配置我们的詹金斯机器,以针对不同的测试框架执行不同的任务? 我知道Esp