目前Spring状态机通过StateMachinePersister接口的实现,完成状态机状态的存储
目前已经提供的存储方式包含Redis,mongoDB,Jpa三种实现,分别对应JpaStateMachineRuntimePersister,RedisStateMachineRuntimePersister 和MongoDbStateMachineRuntimePersister
其中StateContext序列化的方式为kryo,序列化和反序列化都在实现类中自行实现了
基于redis的实例化工具使用
/* 实例化工具配置部分代码,在StateMachine配置类中 */
// 初始化redis连接工厂
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
redisConfig.setHostName("1.1.1.1");
redisConfig.setPassword(RedisPassword.of("xxxx"));
redisConfig.setPort(6379);
return new JedisConnectionFactory(redisConfig);
// 通过名称进行区分(带有不同枚举导致不能混用)
@Bean(name = "newStateMachinePersister")
public RedisStateMachinePersister<NewStates, NewEvents> redisStateMachinePersister(RedisConnectionFactory connectionFactory) {
RedisStateMachineContextRepository<NewStates, NewEvents> repository = new RedisStateMachineContextRepository<>(connectionFactory);
return new RedisStateMachinePersister<>(new RepositoryStateMachinePersist<>(repository));
/* 实例化在项目中的实际引用 */
//状态数据实例化组件
@Resource(name = "newStateMachinePersister")
private StateMachinePersister<NewStates, NewEvents, String> newStateMachinePersister;
// 状态机状态的恢复
newStateMachinePersister.restore(newStateMachine, STATE_MACHINE_PREFIX + id);
// 状态机状态的存储
newStateMachinePersister.persist(newStateMachine, STATE_MACHINE_PREFIX + id);
文章仅作为个人学习整理
实际的企业应用中状态机的流程会更加复杂,而我们最常用到的就是choice。它类似于java的if语句,作为条件判断的分支而存在,让我们先看一张图:
这张图表现的是一个表单(form)的整个状态流程:
创建初始的空白表单( BLANK_FORM)
填写(WRITE)表单,成为填充完表单(FULL_FORM)
检查(CHEKC)表单
如果是表单名(formName)不为null,表单成为待提交表...
浏览器打开
Spring Statemachine是应用程序开发人员在Spring应用程序中使用状态机概念的框架
Spring Statemachine旨在提供以下功能:
1. 易于使...
浏览器打开
持久化到内存hashmap中
实现StateMachinePersist接口,并通过实现write和read方法,然后构造DefaultStateMachinePersister bean
FSMStateMachinePersist 实现接口 StateMachinePersist
package com.wtx.springboot2.statemachine;
import org.springframework.statemachine.StateMachineContext;
impor
浏览器打开
在实际业务中,状态机可能需要在某个环节停留,等待其他业务的触发,然后再继续下面的流程。比如订单,可能在支付环节需要等待一个剁手的用户隔天再下单,所以这里面涉及到一个创建的状态机该何去何从的问题。在spring statemachine中,给出来的办法就是保存起来,到需要的时候取出来用。
持久化到本地内存
首先要实现StateMachinePersist接口,这个接口非常简单,就是write和rea...
浏览器打开
Spring Statemachine 简介
Spring Statemachine是Spring官方提供的一个框架,供应用程序开发人员在Spring应用程序中使用状态机。支持状态的嵌套(substate),状态的并行(parallel,fork,join)、子状态机等等。
官网地址:https://projects.spring.io/spring-statemachine/
本文使用版本:2.2.0.RELEASE
Spring Statemachine 项目模块
Spring Statemachine是应用程序开发人员在Spring应用程序中使用状态机概念的框架。
Spring Statemachine旨在提供以下功能:
易于使用的扁平单级状态机,用于简单的使用...
浏览器打开
概要:Spring Statemachine
状态机之所以强大,是因为始终保证行为是一致的,这使得调试相对容易。这是因为在机器启动时,操作规则是不可更改的。其思想是,应用程序可能存在有限数量的状态,某些预定义的触发器可以将应用程序从一种状态转移到另一种状态。这样的触发器可以基于事件或计时器。
在应用程序之外定义高级逻辑,然后依靠状态机来管理状态要容易得多。您可以通过发送事件、侦听更改或请求当前状态来与状态机交互。
官网地址:https://projects.spring.io/spring-statemac
浏览器打开
Recipes # Persist
PersistStateMachineHandler + PersistStateChangeListener
PersistStateMachineHandler不是县城安全的,不适合 multi user environment
根据PersistStateMachineHandler的实现,所有的业务逻辑,包括状态变化的持久花都应该写道PersistSt...
浏览器打开
什么是状态机
在某个起始状态下,当满足某个条件时,将状态转换到另一个状态的机制。状态机就是实现这一机制的控制元件。状态机的概念也经常出现在电气元件中。
而在软件开发中,状态机指的是一种在某个状态下,由某个事件触发,并将状态转移到目标状态的一个模块。
为什么要使用状态机
状态机解决的痛点在于,当某个业务流程很长,且很复杂时,对于状态的流转的维护成本将膨胀到不可接受的程度。而将状态的流转从业务代码中剥离出来,让开发过程中更加专注于业务处理,就成为了项目急需解决的问题。
状态机的引入,让程序开发不再需要关注复杂繁
浏览器打开
推荐渐进式解析 Redis 源码 - 哨兵 sentinel 上面比较全面,我这也是参考上面的。
文章目录sentinelFailoverStateMachine(故障转移的主流程)sentinelFailoverWaitStart(第一步故障转移开始)sentinelFailoverSelectSlave(第二步,选择晋升的服务器节点函数)sentinelSelectSlave(选举一个sentinel来主导故障转移的)sentinelFailoverSendSlaveOfNoOne(第三步发送 sl.
浏览器打开
有限状态机(Finite-state machine)
有限状态机(英语:finite-state machine,缩写:FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。应用FSM模型可以帮助对象生命周期的状态的顺序以及导致状态变化的事件进行管理。将状态和事件控制从不同的业务Service方法的if else中抽离出来。FSM的应用范围很广,对于有复杂状态流,...
浏览器打开
1.1 状态机定义
有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
有限状态机体现了两点:首先是离散的,然后是有限的。
State:状态这个词有些难以定义,状态存储关于过去的信息,就是说它反映从系统开始到现在时刻的输入变化。
Actions
浏览器打开
前面我们讨论过FSM,一种专门为维护内部状态而设计的Actor,它的特点是一套特殊的DSL能很方便地进行状态转换。FSM的状态转换模式特别适合对应现实中的业务流程,因为它那套DSL可以更形象的描述业务功能。为了实现FSM的可用性,就必须为FSM再增加自我修复能力,PersistentFSM是FSM和PersistentActor的合并,是在状态机器模式的基础上再增加了状态转变事件的持...
浏览器打开
以下是Spring Statemachine官方文档的定义。Spring Statemachine(SSM)是一个框架,它允许应用程序开发人员在Spring应用程序中使用传统的状态机概念。SSM提供以下功能:
易于使用的平面(一级)状态机,用于简单的用例。
分层状态机结构,以简化复杂的状态配置。
状态机区域提供更复杂的状态配置。
触发器、转换、保护和操作的使用。
类型安全的配...
浏览器打开