我正在尝试将Rego中的IdempotentSaga
与MongoDb一起使用作为存储。
像这样配置Rebus时,我启用了幂等性:
Configure
...
.Options( o => { o.EnableIdempotentSagas(); } )
...
.Sagas( s => { s.StoreInMongoDb( mongoDatabase ); } )
我在调试中看到,(在处理消息期间)IdempotencyData
实例中的属性IdempotentSagaData
存储了已处理的消息ID。
但是,当传奇数据持续存在时,IdempotencyData
始终存储为空文档:
{
"_id" : NUUID("0aa63d69-f8f9-46bd-ab29-f1e46411a166"),
"Revision" : 1,
"IdempotencyData" : {},
...
}
,因此当从存储中加载传奇数据以处理消息时,它始终显示为空。
这似乎忽略了所有幂等性检查,以后重新发送的消息将被视为全新。但是IdempotencyData
类的设计方式似乎使其无法被默认的MongoDb BsonSerializer(仅获取属性,私有支持字段)序列化。
这是故意行为吗?也许我缺少一些配置步骤,可以保留幂等数据?
预先感谢您的帮助。
答案 0 :(得分:0)
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存储初始化期间注册了适当的类映射。