AxonFramework扩展
MongoEventStorageEngine 有一个 @PostConstruct 注解方法,称为 ensureIndexes ,它将生成正确操作所需的索引。 这意味着,当在自动调用 @PostConstruct 处理程序的容器中运行时,"聚合标识符" 和"事件序列号"所需的唯一索引会在创建事件存储时创建。
请注意,查询优化和更新速度之间始终存在平衡。 负载测试最终是发现哪些索引提供最佳性能的最佳方式。 正常操作使用 在领域事件(默认名称: "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(); }