我们最近开始在项目中实现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处理。