3 CQRS Saga 模式

本文介绍了CQRS Saga模式的概念,包括总线、命令、事件和处理器的角色。Saga代表一个业务流程,如下订单,它由一系列处理器组成。通过命令触发流程,如下订单命令检查商品库存,若库存充足则创建订单。支付完成后, Saga结束。文章还讨论了Saga与处理器的关系,以及一个下订单Saga的示例,展示了如何使用事件处理器记录订单详情。
摘要由CSDN通过智能技术生成

概念

总线:负责发送命令、事件、持久化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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值