2

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

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

我的第一个想法就是从现有的数据库中生成一堆创建命令,所以索引的填充只用事件来完成。这在第一次运行时可能需要一段时间,但我们可能对此没意见。

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

4

2 回答 2

3

将应用程序迁移到 CQRS 不是一件容易的事,而且绝对不是一步就能完成的事情。但是,如果应用程序设置正确,则绝对有可能慢慢转向(更多)CQRS。

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

在“弹性端”,定义一些事件处理程序来监听这些事件并在那里对你的模型进行必要的更新。您可以选择将必要的数据放入事件中,或者简单地将事件用作“触发器”来从应用程序中查询当前状态。

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

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

于 2017-02-21T08:39:25.110 回答
1

只是分享一些经验:

  • 我从命令网关和命令处理程序开始在我的 Spring MVC 控制器和任务调度程序中调度和管理命令。

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

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

于 2015-04-18T13:36:55.757 回答