设置新传奇的初始状态

时间:2015-08-16 17:54:07

标签: c# nservicebus saga

我们正在将遗留系统迁移到nservicebus 5.0。通常,将业务数据迁移到saga数据的最佳方法是什么?例如,如果我们有一个OrderCancellationPolicy传奇,只允许在2天内取消,遗留系统的过去订单将如何在正确的状态下创建这些新传奇?

我看到两个选项。第一个是编写一些sql脚本来预填充saga持久性表(我们使用的是nhibernate持久性)。另一种是创建某种特殊的导入消息,例如MigrateOrderDataCmd,它包含来自旧订单的数据。导入脚本可以发送这些消息,sagas可以处理这些消息并以这种方式设置传奇数据。

对此领域的任何指导表示赞赏。

1 个答案:

答案 0 :(得分:1)

从理论上讲,我会选择第二选项或其中的一个版本。想象一下,你的传奇已经停顿了一天,消息堆积在队列中。有了一天的消息,您需要验证消息的发送时间,或者自己在消息中添加自定义DateTime。

当saga最终收到消息时,它知道它不应该在将来两天设置超时,而是将消息传递到传奇中的时间。这样,当您迁移当前状态时,所有消息都会获得正确的超时设置。

另一方面,如果您有大量正在运行的进程,则可能需要调查如何传播表。我自己没有经验将记录添加到这些表中,只是更改它们。 :)