gpt4 book ai didi

mongodb-.net-driver - 为 NEventStore 设置 mongodb 持久性时需要为每种事件类型注册 BsonClassMap?

转载 作者:行者123 更新时间:2023-12-04 08:11:19 25 4
gpt4 key购买 nike

Oliver's EventStore 设置 mongodb 持久性时, 是否需要为每种事件类型注册 BsonClassMap?如果我不这样做,我会得到异常 Unknown discriminator value 'InventoryItemCreated'。我用 MongoDB 注册了所有事件类型,比如 I described here ,然后配置我的事件存储:

var types = Assembly.GetAssembly(typeof(SimpleCQRS.Event))
.GetTypes()
.Where(type => type.IsSubclassOf(typeof(SimpleCQRS.Event)));
foreach (var t in types)
BsonClassMap.LookupClassMap(t);

var store = Wireup.Init()
.UsingMongoPersistence("mongo", new DocumentObjectSerializer())
.UsingSynchronousDispatchScheduler()
.DispatchTo(new DelegateMessageDispatcher(DispatchCommit))
.Build();

这真的是必须要做的吗?

我在修改 Greg Young 的“最简单的东西”以支持具有 MongoDB 持久性的 Oliver 事件存储时遇到了这个问题,code is on github .

一些相关观察(tldr)

如果我注册事件类型,我可以从一个空的事件存储开始(因为不需要反序列化事件)。我可以添加一个库存项目并且我的事件存储有一个提交:

/* 0 */
{
"CommitId" : new BinData(3, "4iXrzvzNYEyKmGweCKkOVQ=="),
"CommitStamp" : ISODate("2012-08-01T08:08:35.795Z"),
"Dispatched" : true,
"Events" : [{
"StreamRevision" : 1,
"Payload" : {
"Headers" : { },
"Body" : {
"_t" : "InventoryItemCreated",
"Version" : 0,
"_id" : new BinData(3, "36qvklv+xU2+mDhVUlzmBg=="),
"Name" : "abc"
}
}
}],
"Headers" : { },
"_id" : {
"StreamId" : new BinData(3, "36qvklv+xU2+mDhVUlzmBg=="),
"CommitSequence" : 1
}
}

当我重新启动应用程序并重播此单个事件时,它无法反序列化 PayLoad.Body,因为 Unknown discriminator value 'InventoryItemCreated'

我找到了两种成功重播 InventoryItemCreated 事件的替代方法:

  • 当我在重播之前创建另一个库存项目时,我可以重播所有事件;显然 MongoDB 然后知道鉴别器。
  • 手动将鉴别器更改为完整的类型名称:
/* 0 */
{
// ..
"Events" : [{
"StreamRevision" : 1,
"Payload" : {
"Headers" : { },
"Body" : {
"_t" : "SimpleCQRS.InventoryItemCreated, SimpleCQRS",
// ..

令我感到有点尴尬的是,显然系统可以在不注册所有事件类型的情况下工作,但选择了一个默认的鉴别器确定策略来防止这种情况。

最佳答案

我遇到过同样的情况。目前,我以与您描述的类似方式执行 BSON 注册。让系统在启动时执行此注册并不困扰我。

此外,我将我的事件和命令类保存在与实际域逻辑不同的项目中,因为我可以在服务器和客户端项目中“共享”类结构。

关于mongodb-.net-driver - 为 NEventStore 设置 mongodb 持久性时需要为每种事件类型注册 BsonClassMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11755859/

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