【问题标题】:Setting initial state of new saga设置新 saga 的初始状态
【发布时间】:2015-08-18 07:20:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# nservicebus saga


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,谢谢您的建议。我只是想确保没有我忽略的第三种选择:)
    猜你喜欢
    • 1970-01-01
    • 2020-11-02
    • 2021-03-10
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多