概念
总线:负责发送命令、事件、持久化Saga
命令:描述一个命令
事件:描述一个事件
处理器:处理命令或事件
Saga:代表一个流程,是由完成一个流程的一系列处理器组成
什么是Saga
Saga代表一个流程
如下订单流程
下订单包含如下命令和事件:
下订单命令:
用于开启saga流程,此时saga被创建并持久化(如保存到数据库中),用户点击“下单”时,发送一个Http请求触发该命令,该命令会发送“检查商品库存命令”
检查商品库存命令:
这里会检查商品库存,如果库存充足,则创建“订单聚合”,状态为未支付,并结束Http请求
支付完成事件:
如果用户支付完成,会触发该事件,更改“订单聚合”,状态为以支付,并发送“订单创建完成事件”
此时saga以完成,将会被移除
同理配送流程
订单创建完成事件:
开启saga流程,该事件会创建配送单
…
Saga与处理器
Saga是执行上有顺序的步骤集合,处理器是一个步骤
应用场景示例:
Saga:下订单Saga,用于下订单
处理器:订单创建完成事件处理器,用于记录谁在什么时候下了什么订单
代码示例
命令和事件:
// 表示一个命令或事件
public abstract class Message {
public Guid SagaId {
get; }
public Message (Guid sagaId) {
SagaId = sagaId;
}
}
// 下订单命令
public class PlaceOrderCommand : Message {
public PlaceOrderCommand () : base (Guid.NewGuid ()) {
}
}
...
Saga:
public abstract class SagaBase {
public SagaBase () {
SagaId = Guid.NewGuid ();
}
public Guid SagaId {
get; set; }
public bool IsCompleted {
get