Rebus:IdempotencyData是否应与IdempotentSagaData实例一起保留?

时间:2018-06-21 12:30:52

标签: c# mongodb rebus

我正在尝试将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(仅获取属性,私有支持字段)序列化。

这是故意行为吗?也许我缺少一些配置步骤,可以保留幂等数据?

预先感谢您的帮助。

1 个答案:

答案 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存储初始化期间注册了适当的类映射。