设置新传奇的初始状态

Setting initial state of new saga

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

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

在此方面的任何指导表示赞赏。

理论上我会选择选项二,或者它的一个版本。想象一下,您的 saga 宕机了一天,消息堆积在队列中。收到一天的消息后,您需要验证消息的发送时间,或者自己向消息添加自定义日期时间。

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

另一方面,如果您有一组非常大的 运行 进程,您可能想要研究如何传播表。我自己没有向这些表添加记录的经验,只是更改它们。 :)