0

我们最近开始在我们的项目中实现 Nservice 总线。我们是 Saga Service 的新手,我们对以下情况感到震惊。

假设我们的 saga 中有 4 个步骤,saga 将由 message1 启动。

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

我们怎样才能做到这一点?除了在 message2 句柄上使用 Thread.Sleep或类似具有通用方法的东西之外,该方法将在检查 message1 完成后在消息 2 到达时调用,并在检查消息 2 到达后在消息 1 处理结束时调用。

我们没有使用服务矩阵。

提前致谢。

4

2 回答 2

0

我会执行你的第二个建议。这与我们一直采用的方法相似。

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

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

于 2014-10-24T05:59:00.290 回答
0

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

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

  • 如果 message1 没有完成调用RequestTimeout

当调用超时处理程序时:

  • 如果 message1 完成,则向执行 message2 工作单元的处理程序发送消息

  • 如果 message1 未完成,则执行另一个RequestTimeout,直到 message1 完成处理

我强烈建议不要做任何像线程睡眠这样的事情

剂量有意义吗?

于 2014-10-25T10:05:36.060 回答