4.Workflow Core之Saga事务

4.Workflow Core之Saga事务

Saga事务

Saga可以封装一系列步骤,并可以为每个步骤进行补偿操作。

1
2
3
4
5
6
7
8
9
10
11
12
//Task2会抛出异常,则会触发undotask2和undotask1
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
//该案例会5s重试一次
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>()//补充整个saga事务
.Then(context => Console.WriteLine("End"));

给补偿步骤传参

1
2
3
4
5
6
builder
.StartWith<SayHello>()
.CompensateWith<PrintMessage>(compensate =>
{
compensate.Input(step => step.Message, data => "undoing...");
})
作者

步步为营

发布于

2024-03-23

更新于

2025-03-15

许可协议