gpt4 book ai didi

CQRS & ElasticSearch - 使用 ElasticSearch 构建读取模型

转载 作者:行者123 更新时间:2023-11-29 02:53:22 25 4
gpt4 key购买 nike

有人使用 ElasticSearch 在 CQRS 方法中构建读取模型吗?我有一些与此类解决方案相关的问题:

  1. 您将域存储在哪里事件?在 JDBC 数据库中?在 Elasticsearch ?
  2. 您是通过处理域事件的事件处理程序还是使用 ElasticSearch River 功能来构建索引?
  3. 您如何处理 View 模型的完全重建 - 例如,在 View 损坏的情况下?您是否处理所有事件以重建 View ?

最佳答案

域事件的权威存储库所在的位置是实现细节。例如,您可以将序列化版本存储在 S3 或 CouchDB 或任何其他数量的存储实现上。如果您刚开始,最简单的方法是关系数据库。

通常人们使用了解每条消息背后的业务意图的事件处理程序,然后可以将消息适本地非规范化为适合您的 View 需要的读取模型结构。

如果 View 模型曾经损坏或者您可能在 View 模型处理程序中有错误,修复错误后可以执行几个简单的步骤:

  1. 临时排队来自域的事件流——这些是在您的域工作时发布的典型消息。我们仍然需要这些消息,但不是现在。这可以通过关闭任何消息总线或不连接到您的队列基础设施(如果您使用的话)来完成。

  2. 从事件存储中读取所有事件。当接收到每个事件时(这可以通过简单的数据库查询来完成),通过适当的消息处理程序运行每条消息。确保跟踪所有已处理消息的最后 10,000 个(左右)标识符。

  3. 现在重新连接到您的队列并开始正常处理。如果已看到消息的标识符,则删除该消息。否则,正常处理。

跟踪标识符的原因是为了避免竞争条件,即您从事件存储中获取所有事件,但同一消息通过消息队列传递。

另一种高度相关但涉及跟踪所有消息标识符的技术可以在这里找到:http://blog.jonathanoliver.com/2011/03/removing-2pc-two-phase-commit.html

关于CQRS & ElasticSearch - 使用 ElasticSearch 构建读取模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4427975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com