Rebus:IdempotencyData 是否应该与 IdempotentSagaData 实例一起持久化?

Rebus: Should IdempotencyData be persisted along with IdempotentSagaData instance?

我正在尝试将 Rebus 中的 IdempotentSaga 与 MongoDb 一起用作存储。 我在像这样配置 Rebus 时启用幂等性:

Configure
    ...
    .Options( o => { o.EnableIdempotentSagas(); } )
    ...
    .Sagas( s => { s.StoreInMongoDb( mongoDatabase ); } )

我可以在调试中看到(在处理消息期间)IdempotentSagaData 实例中的 属性 IdempotencyData 存储已处理的消息 ID。

但是当 saga 数据被持久化时,IdempotencyData 总是存储为空文档:

{
    "_id" : NUUID("0aa63d69-f8f9-46bd-ab29-f1e46411a166"),
    "Revision" : 1,
    "IdempotencyData" : {},
    ...    
}

因此,当从存储加载 saga 数据以处理消息时,它总是显示为空。

这似乎忽略了所有的幂等性检查,以后重新传递的消息将被处理,就好像它们是全新的一样。但是 IdempotencyData class 的设计方式似乎阻止了它被默认的 MongoDb BsonSerializer(只获取属性,私有支持字段)序列化。

这是故意的行为吗?也许我遗漏了一些允许幂等性数据持久化的配置步骤?

在此先感谢您的帮助。

Rebus(Rebus 5.0.0-b14 之前的所有版本)有一个不友好的 BSON 序列化程序IdempotencyData,因此无法正确往返这个非常重要的数据 当使用 IIdempotentSagaData.

已在 Rebus.MongoDb 5.0.0-b02 和 Rebus 5.0.0-b14 中修复。

Rebus 的 IdempotencyData 现在有适当的构造函数,允许序列化程序以这种方式初始化整个状态。

Rebus.MongoDb 现在在 saga 存储初始化期间注册适当的 class 映射。