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 映射。
我正在尝试将 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 映射。