我们最近开始在我们的项目中实施Nservice总线。我们是佐贺服务的新手,我们对以下情况感到震惊。
假设我们在saga中有4个步骤,saga将由message1启动。
消息2将由某些外部服务触发。我们必须处理message2,并且只在完成message1处理后才能运行很长时间。
我们怎样才能做到这一点?除了在消息2处理之后使用 Thread.Sleep 之类的东西,或者在检查消息1到达之后在消息2到达时在消息2到达时调用的常用方法之后,以及在消息2到达之后的消息1处理结束时。
我们没有使用服务矩阵。
提前致谢。
答案 0 :(得分:0)
我会实施你的第二个建议。这与我们采用的方法类似。
因此,在您的SagaData中,您将拥有一个状态标志,指示Message1是否已成功处理,另一个状态标志指示是否已收到Message2,还存储处理Message2所需的任何属性。
在Message1处理程序的末尾,在Message2处理程序的属性存储部分之后,您将调用一个检查两个消息的状态标志的公共方法,如果两个状态标志都已设置,则继续Message2处理。
答案 1 :(得分:0)
您可以使用timeout feature执行以下操作:
当调用message2的处理程序时,检查message1是否已完成(saga数据中的属性)
调用超时处理程序时:
如果message1完成,则向执行该操作的处理程序发送消息 message2的工作单元
如果message1没有完成,请执行另一个 RequestTimeout ,直到message1 是完整的处理
我强烈建议不要做任何类似线程睡眠的事情
有意义的剂量?