【问题标题】:Suspending and modifying NServiceBus saga timeouts暂停和修改 NServiceBus 传奇超时
【发布时间】:2013-02-06 16:00:07
【问题描述】:

我有一个 saga,它代表一个“人”到一个“案例”的长期工作分配过程。几个事件可能会启动它,并且在流程结束时我们有一个分配确认,此时 saga 完成并将 Person 分配给 Case。我想为这个传奇设置一个超时时间,这样我们就不会无限期地等待确认——这绝对是一个有效的业务用例。那里没有困难 - 相当普通。

问题在于,如果有人搁置案例,则此分配过程可能会被阻止。我有一个可以订阅的事件,所以我的 assignment saga 知道 Case 处于暂停状态,但除非我调整超时或以某种方式暂停它,否则 assignment saga 可能会在 Case hold 之前超时发行了。这样做没有商业意义,所以我基本上想停止超时时钟,直到其他事件发生。

几年前here 也提到了同样的问题。这仍然是不可能的,还是 v3.x 中有允许它的新功能?如果没有,这是计划中的功能吗?

谢谢!

【问题讨论】:

    标签: nservicebus nservicebus3


    【解决方案1】:

    当您的案件被搁置时,为什么不完全取消实例的超时?您的 saga 维护案例的状态和计算的案例到期时间。这可以在您创建第一个超时时设置。当案例被重新激活时,只需计算重新激活和保存的“截止日期”的时间差,并为该实例创建一个新的超时时间。您可能还需要考虑案例被搁置的时间,并设置一个新的截止日期,您可以将其保存回实例状态。

    【讨论】:

    • 只是想给你一些荣誉 - 我绝对认为当我的案件搁置时我需要更聪明地了解我的超时值需要是什么。我没有考虑过 - 谢谢!
    【解决方案2】:

    我认为没有办法直接切换到计时器并将超时消息“暂停”

    我会在 saga 的超时处理程序中使用该逻辑。检查案例是否处于搁置状态,并在不结束 saga 的情况下请求另一个超时。

    【讨论】:

    • 您将始终需要在超时发生时处理“on-hold”命令的竞争条件,在这种情况下,您实际上无法对场景进行任何不同的编码,即使您可以暂停或修改超时。
    • 是的。因此,如果在案件被“搁置”之前,案件“超时”,为什么您需要知道业务成本/解决方案
    • 谢谢大家!我认为这种模式对我和其他人都很好,所以我认为它是“答案”。但是,根据域的详细信息,我可能还需要考虑@stephenl 发布的内容。我们可能不想将时钟重置为“零”,而是将其重置为从 saga 数据派生的其他值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多