状态机

状态机设计

1、选型

(1)stateless4j

        stateless4j足够轻量,同步模型,在app中使用比较合适,但在服务端解决复杂业务场景上stateless4j确实略显单薄。
        例如对于持久化状态实现比较麻烦

(2)squirrel foundation

官网:http://hekailiang.github.io/squirrel/

github:https://github.com/hekailiang/squirrel

star:1.7k

优点:

        stateMachine实例创建开销小,设计上就不支持单例复用,因此状态机的本身的生命流管理也更清晰,避免了类似spring statemachine复用statemachine导致的deadlock之类的问题

缺点:

        builder.externalTransition().from("A").to("B").on(FSMEvent.ToB).callMethod("fromAToB");这种写法在编译时不容易发现错误

        切点粒度比较粗,要使用细粒度的切点需要自己实现模型相比较spring statemachine较为简单,实现复杂的多层状态模型需要在此基础上开发实现

(3)spring statemachine:

官网:https://projects.spring.io/spring-statemachine/

github:https://github.com/spring-projects/spring-statemachine

star:1.2k

优点:

        分层状态机结构以简化复杂的状态配置。

        状态机区域提供更复杂的状态配置。

        触发器、转换、守卫和动作的使用。

        用于在 Spring 应用程序上下文之外轻松实例化的构建器模式

        基于 Zookeeper 的分布式状态机

        状态机事件侦听器。

        UML Eclipse Papyrus 建模。

        将机器配置存储在持久存储中。

        Spring IOC 集成将 bean 与状态机相关联。

缺点:

        对于一些没有接入spring框架的应用接入比较困难

       接入学习成本相对较高,文档较少

       监听器、aop等组件模块都使用了spring框架中的模块,在上面做改造较难

 

状态机-相关概念

  • transition: 转换,表示两种状态间的一种关系。
  • source:节点的当前状态
  • target:节点的目标状态
  • event:事件,触发节点从当前状态到目标状态的动作
  • guard:起校验功能,一般用于校验是否可以执行后续action
  • action:用于实现当前节点对应的业务逻辑处理

主要使用流程:

        定义状态枚举。
        定义事件枚举。
        定义状态机配置,设置初始状态,以及状态与事件之间的关系。
        定义状态监听器,当状态变更时,触发方法。

posted @ 2022-01-27 11:36  三号小玩家  阅读(410)  评论(0编辑  收藏  举报
Title
三号小玩家的 Mail: 17612457115@163.com, 联系QQ: 1359720840 微信: QQ1359720840