【问题标题】:Rebus: Should IdempotencyData be persisted along with IdempotentSagaData instance?Rebus:是否应该将 IdempotencyData 与 IdempotentSagaData 实例一起持久化?
【发布时间】: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 序列化(仅获取属性,私有支持字段)。

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

提前感谢您的帮助。

【问题讨论】:

    标签: c# mongodb rebus


    【解决方案1】:

    Rebus(Rebus 5.0.0-b14 之前的所有版本)有一个不友好的 BSON 序列化器 IdempotencyData,因此在使用 @987654322 时无法正确地往返这个非常重要的数据片段 @。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 2013-04-19
      • 2011-02-06
      • 1970-01-01
      • 2013-10-16
      相关资源
      最近更新 更多