MassTransit Saga State : 想在移动状态后采取行动

MassTransit Saga State : Would like to do action after moving the state

我正在实施状态为“Initial”>“Pending Acknowledged”>“Acknowledged”>“Finalized”的 MassTransit SAGA 状态机。 “Pending Acknowledged”和“Acknowledged”可以切换。但是我想在将状态从“Pending Acknowledged”更改为“Acknowledged”后采取行动。

目前,我尝试在过渡到“AcknowLedged”后添加 thenAsync 任务。我发现当调用 DoSomeThing 任务和操作时,状态不会移动到“已确认”。它没有按预期工作。

 **During(PendingAcknowledged)**,
 When(DoAcknowledged)
   .ThenAsync(MarkAcknowledged)
   .Then(context => Log.Information("{@DoAcknowledge}", context.Instance))
   **.TransitionTo(Acknowledged),**
   **.ThenAsync(DoSomeThing)**

有什么建议吗?我该怎么做?

收到事件后,MassTransit:

  1. 加载现有的 saga 实例或创建新的 saga 实例
  2. 执行加载实例时与当前状态关联的所有活动
  3. 将 saga 实例保存到 saga 存储库

允许在状态机中有多个 TransitionTo 活动,但只有在所有活动完成后,saga 实例才会与最后一个状态一起保存。

因此,根据您的示例,这是完全合法的,并且会将 Acknowledged 状态保存到存储库中。

During(PendingAcknowledged),
    When(DoAcknowledged)
        .ThenAsync(MarkAcknowledged)
        .Then(context => Log.Information("{@DoAcknowledge}", context.Instance))
        .TransitionTo(Acknowledged),
        .ThenAsync(DoSomeThing)