首页 > 网络 > 网络热点

管理订单状态,该上状态机吗?

常驻编辑 网络热点 2022-06-05 连贯   状态   嵌套   状态机   线程   订单   接口   原理   代码   方法   项目

前言

在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值。去年笔者进入了电商领域从事后端开发。电商领域,状态又多又复杂,如果仍然在业务代码中东一块西一块维护状态值,很容易陷入出了问题难于Debug,难于追责的窘境。5zq拜客生活常识网

碰巧有个新启动的项目需要进行订单状态的管理,我着手将Spring StateMachine接入了进来,管理购物订单状态,不得不说,Spring StateMachine全家桶的文档写的是不错,并且Spring StateMachine也是有官方背书的。但是,它实在是太”重“了,想要简单修改一个订单的状态,需要十分复杂的代码来实现。具体就不在这里展开了,不然我感觉可以吐槽一整天。5zq拜客生活常识网

说到底Spring StateMachine上手难度非常大,如果没有用来做重型状态机的需求,十分不推荐普通的小项目进行接入。5zq拜客生活常识网

最最重要的是,由于Spring StateMachine状态机实例不是无状态的,无法做到线程安全,所以代码要么需要使用锁同步,要么需要用Threadlocal,非常的痛苦和难用。 例如下面的Spring StateMachine代码就用了重量级锁保证线程安全,在高并发的互联网应用中,这种代码留的隐患非常大。5zq拜客生活常识网

private synchronized boolean sendEvent(Message message, OrderEntity orderEntity) {
        boolean result = false;
        try {
            stateMachine.start();
            // 尝试恢复状态机状态
            persister.restore(stateMachine, orderEntity);
            // 执行事件
            result = stateMachine.sendEvent(message);
            // 持久化状态机状态
            persister.persist(stateMachine, (OrderEntity) message.getHeaders().get("purchaseOrder"));
        } catch (Exception e) {
            log.error("sendEvent error", e);
        } finally {
            stateMachine.stop();
        }
        return result;
    }

吃了一次亏后,我再一次在网上翻阅各种Java状态机的实现,有大的开源项目,也有小而美的个人实现。结果在COLA架构中发现了COLA还写了一套状态机实现。COLA的作者给我们提供了一个无状态的,轻量化的状态机,接入十分简单。并且由于无状态的特点,可以做到线程安全,支持电商的高并发场景。5zq拜客生活常识网

COLA是什么?如果你还没听说过COLA,不妨看一看我之前的文章,传送门如下:5zq拜客生活常识网

https://mp.weixin.qq.com/s/07i3FjcFrZ8rxBCACgeWVQ5zq拜客生活常识网

如果你需要在项目中引入状态机,此时此刻,我会推荐使用COLA状态机。5zq拜客生活常识网

COLA状态机介绍

COLA状态机是在Github开源的,作者也写了介绍文章:5zq拜客生活常识网

https://blog.csdn.net/significantfrank/article/details/1049964195zq拜客生活常识网

官方文章的前半部分重点介绍了DSL(Domain Specific Languages),这一部分比较抽象和概念化,大家感兴趣,可以前往原文查看。我精简一下DSL的主要含义:5zq拜客生活常识网

什么是DSL? DSL是一种工具,它的核心价值在于,它提供了一种手段,可以更加清晰地就系统某部分的意图进行沟通。

相关阅读:

  • 尤伯杯陈雨菲开门红,何冰娇三局险胜,中国队横扫印尼进四
  • 当前正在热播的六部剧,《破事精英》排第三,你在追哪一部
  • 女孩醉心武侠,自导自演成一派,这表演看着过瘾
  • 第74集团军某旅组织侦察专业跨昼夜连贯考核——大雨未
  • A股,或将迎来一次大洗牌
  • 第74集团军某旅组织侦察专业跨昼夜连贯考核
  • 陪你笑,看你闹
  • 酒局小游戏,无道具(3.0)
  • 西媒:超仿真机器人能表达感情
  • 8868体育:快速崩盘,诺丁汉四连败
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。