如何在现有数据库上开始将CQRS与Axon框架一起使用

时间:2014-06-11 10:02:22

标签: cqrs axon

我们有一个使用图形数据库的现有web应用程序,我们希望使用带有Axon框架的cqrs切换到架构。

我想知道是否有任何最佳实践如何处理我们的生产数据库中已有的数据。我们需要填充一个索引数据库(elasticsearch),我希望使用事件监听器来保持更新。该索引需要使用已在生产中的数据进行初始化,但没有与之相关的事件。

我的第一个想法是从现有数据库生成一堆create命令,因此索引的填充仅在事件中完成。首次运行可能需要一段时间,但我们可能还不错。

这听起来像个好主意吗?还有其他想法吗?

2 个答案:

答案 0 :(得分:2)

将应用程序迁移到CQRS并非易事,绝对不是一步到位的事情。但是,如果应用程序设置正确,它绝对有可能慢慢走向(更多)CQRS。

由于您的挑战似乎是添加额外的视图模型(ElasticSearch),我的建议是从发布事件开始。在Axon Framework中,这意味着定义一个事件总线并向其发布消息。

在" Elastic-side"上,定义一些侦听这些事件并在那里对模型进行必要更新的事件处理程序。您可以选择将必要的数据放入事件中,或者只是将事件用作"触发器"从您的应用程序查询当前状态。

下一步可能是使用命令处理程序,命令总线和命令消息来处理前端(或集成)组件所请求的更改。 一旦有了这些,就可以开始考虑将这些Command Handler组件分离到一个单独的组件中(使用事件来更新分离后留下的查询组件)。

在执行每个步骤之前,请考虑他们为您提供的工作量和实际优势。例如,它可能不值得取出命令处理组件。从" monolith"发送事件可能已经给你足够的灵活性来围绕它构建单独的组件。

答案 1 :(得分:1)

只是分享一些经验:

  • 我开始使用Command Gateway和Command Handler在我的Spring MVC控制器和任务调度程序中调度和管理命令。

  • 事件看起来也很有趣,但是,我还没有找到一种方法将事件(没有事件源)集成到现有的spring-data或mybatis持久层。

如果在这方面有任何例子,我们将不胜感激: - )