【发布时间】:2018-06-22 17:33:35
【问题描述】:
我正在尝试将 Rebus 中的 IdempotentSagas 与 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 类的设计似乎阻止了它被默认的 MongoDb BsonSerializer 序列化(仅获取属性,私有支持字段)。
这是一种故意行为吗?也许我错过了一些允许持久化幂等性数据的配置步骤?
提前感谢您的帮助。
【问题讨论】: