如何使Saga消息句柄在NService总线中等待另一个句柄完成



我们最近开始在项目中实现Nservice总线。我们是佐贺服务的新手,我们对以下场景感到震惊。

假设我们的传奇故事有4个步骤,传奇故事将由message1开始。

消息2将由一些外部服务触发。我们必须在message1处理完成后处理message2,这可能会运行很长时间。

我们如何才能做到这一点?除了使用Thread.Sleep on message2 handle或类似于具有通用方法的方法之外,该方法将在检查消息1完成后消息2到达时调用,并在检查消息2到达后消息1处理结束时调用。

我们没有使用服务矩阵。

提前谢谢。

您可以使用超时功能来执行以下操作:

调用message2的处理程序时,检查message1是否已完成(传奇数据中的属性)

  • 如果message1未完成调用RequestTimeout

调用超时处理程序时:

  • 如果message1已完成,则向执行消息2 的工作单元

  • 如果消息1未完成,请执行另一个请求超时直到消息1正在完成处理

我强烈建议不要做任何类似线程睡眠的事情

这有道理吗?

我会执行您的第二个建议。这与我们一直采取的方法类似。

因此,在您的SagaData中,您将有一个状态标志指示Message1是否已成功处理,另一个状态标记指示Message2是否已收到,还存储处理Message2所需的任何属性。

在Message1处理程序的末尾和Message2处理程序的属性存储部分之后,您将调用一个通用方法,该方法检查两条消息的状态标志,如果两个状态标志都已设置,则继续Message2处理。

最新更新