Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 将eventstore与Axon Framework 3和Spring引导一起使用_Spring Boot_Microservices_Cqrs_Axon - Fatal编程技术网

Spring boot 将eventstore与Axon Framework 3和Spring引导一起使用

Spring boot 将eventstore与Axon Framework 3和Spring引导一起使用,spring-boot,microservices,cqrs,axon,Spring Boot,Microservices,Cqrs,Axon,我正在尝试实现一个简单的分布式应用程序,我想将所有事件保存到事件存储中。 因此,正如Axon的“文档”中所建议的,我希望使用Mysql作为事件存储 因为我对Spring没有太多的经验,所以我不知道如何让它工作。 我将有两个独立的服务,一个用于命令端,另一个用于查询端。由于我计划拥有更多的服务,我想知道如何配置它们以使用外部事件存储(不存储在任何这些服务中) 对于命令和事件的分发,我使用RabbitMQ: @Bean public org.springframework.amqp.core.Exc

我正在尝试实现一个简单的分布式应用程序,我想将所有事件保存到事件存储中。 因此,正如Axon的“文档”中所建议的,我希望使用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作为事件存储?

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

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

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

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

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

  • 为事件使用共享数据库
  • 用于将even发送到不同的实例
  • 用于将even发送到不同的实例
  • 不过,我个人在启动应用程序时的偏好是从一个整体开始,必要时分开。 我认为“进化微服务”一词很好地抓住了这一点

    无论如何,如果您充分使用Axon支持的消息传递范例,在wards之后将命令端和查询端分开应该非常简单。 如果您还使用AxonHub来分发您的消息,那么您实际上已经完成了

    但最后,我没有从您的问题中找到一个非常准确的要求。 这是否为您提供了继续进行所需的信息,@Federico Ponzi

    更新 经过仔细考虑后,我认为你的解决办法很简单。 您正在使用Spring Boot,并且希望将
    EventStore
    设置为使用MySQL。要让Axon设置正确的
    EventStorageEngine
    (封面下用于读取/写入事件的infra组件),只需添加对
    spring boot starter数据jpa
    的依赖项即可。
    Axon it的自动配置将在该场景中自动注意到您的类路径上有Spring数据JPA,因此将设置
    JpaEventStorageEngine

    您好,非常感谢您的回答!我正在开发一个开源解决方案,所以我会选择开源的方式。我不知道你为什么说RabbitMQ不受支持:(我想这是因为RabbitMQ是基于AMQP的)。无论如何,我想使用mysql作为事件存储,并使用RabbitMQ(我用于其他东西)分发消息。我想知道如何配置Axon以使用Mysql作为事件存储。感谢您的回复。我已经向您提供了我的答案的更新。我希望它足够了!