我正在使用 Axon 服务器/框架作为我们的事件源应用程序,并负责使用 Axon-Mongo 扩展来使用 MongoDB 作为我们的嵌入式事件存储。 (这里是我正在使用的Axon的文档)
使用上面链接中建议的 Spring Boot 自动配置选项,我可以成功地将命令服务事件存储在 MongoDB 中。但是,所有事件都存储在“domainevents”集合中。我们的应用程序是具有“行级别”的多租户(这意味着我在所有实体、事件、查询中都有“租户 ID”;并且我正在使用共享数据库、模式、表等)。
例如:这是我目前拥有的:
HOST: somehost-cosmos-mongo.mongo.cosmos.azure.com:
|
|
|__ MONGODB: micro-serivce-ONE-db
| |__ domainevents collection // all events of all tenants here
| |__ snapshotevents collection
|
| ...
|__ MONGODB: micro-serivce-TWO-db
| |__ domainevents collection // all events of all tenants here
| |__ snapshotevents collection
我想将每个租户的事件存储在自己的集合中,如下所示:
HOST: somehost-cosmos-mongo.mongo.cosmos.azure.com:
|
|
|__ MONGODB: micro-serivce-ONE-db
| |__ TENANT-1-domainevents collection // TENANT 1's events here
| |__ TENANT-1-snapshotevents collection
| |__ TENANT-2-domainevents collection // TENANT 2's events here
| |__ TENANT-2-snapshotevents collection
|
| ...
|__ MONGODB: micro-serivce-TWO-db
| |__ TENANT-1-domainevents collection // TENANT 1's events here
| |__ TENANT-1-snapshotevents collection
| |__ TENANT-2-domainevents collection // TENANT 2's events here
| |__ TENANT-2-snapshotevents collection
目前我找不到任何文档或示例代码表明我们可以或应该采用“每个集合一个租户”的方法。从 Axon 提供的 Spring Boot 自动配置示例代码来看,数据库/名称、域事件集合/名称和快照事件集合/名称似乎是在 Spring Boot 自动配置时间创建的(我可以覆盖默认名称),但是我无法在运行时动态创建多个集合并将新事件路由到它们(当我发现新租户时)。
非常感谢您的意见或建议。
作为参考,我使用的是 Java 11,以及以下 pom 依赖项:
<!-- Axon Mongo spring-boot "starter" dependencies -->
<dependency>
<groupId>org.axonframework.extensions.mongo</groupId>
<artifactId>axon-mongo-spring-boot-starter</artifactId>
<version>4.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
首先,我很遗憾看到你四个月没有回复,@Peter。 尽管如此,我想为您提供一些关于遵循事件溯源范式的多租户应用程序主题的指导。
Axon Framework 还具有 Multi-Tenancy 扩展,尽管其重点是与 Axon Server 一起使用。 后者可能无法使其对您有用,但该扩展背后的思考过程仍然可以提供帮助。
Axon Server 有一个称为“多上下文”的功能。此功能可用于镜像具有多个有界上下文(来自 DDD 的概念)的场景,以正确反映您的应用程序环境。 该功能可确保您的命令总线、事件存储、事件总线和查询总线在每个上下文中完全分离。因此,具有两个上下文的设置将具有每种类型的两个总线和两个事件存储。如果您将这一概念与 MongoDB 等其他基础设施进行镜像,那么您将拥有两个专用的
domainevenentry
存储桶,每个上下文一个。
请注意,该功能不称为“有界上下文”——支持。这样做是因为该解决方案对于其他场景也很有用。前面提到的多租户扩展使用多上下文支持为您拥有的每个租户制作不同的巴士和商店。因此,环境成为你的租户。就目前情况而言,我知道有几个团队成功地使用了此功能。
因此,知道了这一点,我认为您大致有两种选择:
将 Axon Server 与多租户扩展一起使用,您实际上已准备就绪。
EventStore
。
总之,我希望这对您有进一步的帮助,尽管回复可能有点晚了!