专业编程基础技术教程

网站首页 > 基础教程 正文

Axon Framework 扩展 - Mongo axon插件

ccvgpt 2024-10-29 13:20:51 基础教程 47 ℃

MongoEventStorageEngine 有一个 @PostConstruct 注解方法,称为 ensureIndexes,它将生成正确操作所需的索引。 这意味着,当在自动调用 @PostConstruct 处理程序的容器中运行时,“聚合标识符” 和“事件序列号”所需的唯一索引会在创建事件存储时创建。

请注意,查询优化和更新速度之间始终存在平衡。 负载测试最终是发现哪些索引提供最佳性能的最佳方式。

Axon Framework 扩展 - Mongo axon插件

  • 正常操作使用 在领域事件(默认名称:"domainevents")集合中的 "aggregateIdentifier""type""sequenceNumber" 上自动创建索引。 此外,在域事件(默认名称:"domainevents")集合上配置了 "timestamp""sequenceNumber" 的非唯一索引,用于 tracking event processor。
  • 快照
    "aggregateIdentifier""sequenceNumber" 的(唯一)索引会在快照事件(默认名称:"snapshotevents")集合中自动创建。
  • saga
    在 saga(默认名称:
    "sagas")集合中的 "sagaIdentifier" 上放置一个(唯一)索引。 在 saga(默认名称:"sagas")集合中的 "sagaType""associations.key""associations.value" 属性上放置索引。

Note

在 Axon Framework 3 之前的版本中,我们发现 MongoDb 非常适合作为 Event Store。 然而,随着跟踪事件处理器的引入以及它们如何跟踪事件,我们在 Mongo 事件存储实现方面遇到了一些低效问题。 我们建议使用像 Axon Server 这样的专用事件存储,或者基于 RDBMS(例如 JPA 或 JDBC 实现),并且仅在您发现 Mongo 的性能有益时才建议在此用例中使用 Mongo 为您的应用程序。

在 Spring Boot 中配置

// 事件存储 “EmbeddedEventStore” 将事件的实际存储和检索委托给 “EventStorageEngine”。
@Bean
public EmbeddedEventStore eventStore(EventStorageEngine storageEngine, AxonConfiguration configuration) {
    return EmbeddedEventStore.builder()
            .storageEngine(storageEngine)
            .messageMonitor(configuration.messageMonitor(EventStore.class, "eventStore"))
            .build();
}

// `MongoEventStorageEngine` 将每个事件存储在单独的 MongoDB 文档中
@Bean
public EventStorageEngine storageEngine(MongoClient client) {
    return MongoEventStorageEngine.builder().mongoTemplate(DefaultMongoTemplate.builder().mongoDatabase(client).build()).build();
}

最近发表
标签列表