Saga事务
Saga可以封装一系列步骤,并可以为每个步骤进行补偿操作。
1 2 3 4 5 6 7 8 9 10 11 12
| builder .StartWith(context => Console.WriteLine("Begin")) .Saga(saga => saga .StartWith<Task1>() .CompensateWith<UndoTask1>() .Then<Task2>() .CompensateWith<UndoTask2>() .Then<Task3>() .CompensateWith<UndoTask3>() ) .Then(context => Console.WriteLine("End"));
|

saga事务的重试
1 2 3 4 5 6 7 8 9 10 11 12 13
| builder .StartWith(context => Console.WriteLine("Begin")) .Saga(saga => saga .StartWith<Task1>() .CompensateWith<UndoTask1>() .Then<Task2>() .CompensateWith<UndoTask2>() .Then<Task3>() .CompensateWith<UndoTask3>() ) .OnError(Models.WorkflowErrorHandling.Retry, TimeSpan.FromSeconds(5)) .Then(context => Console.WriteLine("End"));
|
补偿整个saga事务
1 2 3 4 5 6 7 8 9
| builder .StartWith(context => Console.WriteLine("Begin")) .Saga(saga => saga .StartWith<Task1>() .Then<Task2>() .Then<Task3>() ) .CompensateWith<UndoEverything>() .Then(context => Console.WriteLine("End"));
|
给补偿步骤传参
1 2 3 4 5 6
| builder .StartWith<SayHello>() .CompensateWith<PrintMessage>(compensate => { compensate.Input(step => step.Message, data => "undoing..."); })
|