状态机
文章平均质量分 75
状态机相关
吴声子夜歌
个人学习记录
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Esper——EPL语法概述
1、EPL 的标准语法骨架2、基础过滤与事件流选择(SELECT & FROM & WHERE)3、数据窗口语法(Data Windows)—— 流处理的物理边界4、分组与聚合(GROUP BY & HAVING)5、高级时序控制:输出频率限制(OUTPUT)6、核心杀手级语法:模式匹配(Pattern)7、总结在 Esper 中,EPL(Event Processing Language,事件处理语言) 是整个引擎的灵魂。它的语法虽然极度神似传统数据库的 SQL,但其底层的执行逻辑却恰恰相反。原创 2026-06-02 22:15:58 · 470 阅读 · 0 评论 -
Esper——核心概念
外部系统(如 Kafka)源源不断地送来 事件 (Events)。引擎根据你部署的 EPL 规则 开始过滤。数据进入特定的 数据窗口 (Windows) 缓存片刻,进行平均值、总数等聚合计算。或者数据经过 模式匹配 (Pattern) 引擎,一旦发现时序因果链条对上了,立刻触发你的监听器(Listener),执行诸如“发送短信告警”、“熔断账户”等业务后置逻辑。原创 2026-06-02 21:17:34 · 369 阅读 · 0 评论 -
Esper——快速开始
Esper 编译器和运行时环境的开发旨在满足分析和响应事件的应用程序的需求。业务流程管理和自动化(流程监控、业务自动化管理 (BAM)、异常报告)金融(算法交易、欺诈检测、风险管理)网络和应用程序监控(入侵检测、服务级别协议 (SLA) 监控)传感器网络应用程序(RFID 读取、生产线调度和控制、空中交通)这些应用程序的共同之处在于需要实时或近实时地处理事件(或消息)。这有时被称为复杂事件处理 (CEP) 和事件序列分析。此类应用程序的关键考虑因素是吞吐量、延迟以及所需逻辑的复杂性。原创 2026-06-02 19:31:08 · 209 阅读 · 0 评论 -
状态机——SpringStateMachine嵌套状态流转
在 Spring StateMachine 中,嵌套状态(Substates / Hierarchical States)是指在一个父状态(Parent State)内部,包含了一组子状态(Child States)。这种设计非常适合用来表达“状态中的状态”,能够将复杂的业务逻辑按层级进行拆分。如果状态机当前处于某个子状态,那么它必然也同时处于该子状态的父状态。,顶层状态:待支付(初始状态)IN_PAYMENT,父状态:支付中,子状态:支付准备中,子状态:扣款中,结束状态:待发货。原创 2026-05-21 22:01:42 · 356 阅读 · 0 评论 -
状态机——SpringStateMachine并行区域状态流转
在 Spring StateMachine 中,并行区域(Orthogonal Regions,或称正交区域) 用于处理同一个实体上多个相互独立、互不干扰的状态流转线。在一个汽车电商履约系统中,当用户支付完成后,订单进入 “审核履约中(ON_AUDIT)” 状态。风控审批线:初始为 RISK_CHECKING→→审批通过到达终点 RISK_PASSED。物流仓储线:初始为 PACKING→→打包完成到达终点 PACKED。原创 2026-05-21 00:20:32 · 402 阅读 · 0 评论 -
状态机——Spring State Machine
相比于轻量级的 Cola-StateMachine,Spring State Machine(Spring 状态机) 是 Spring 生态中功能最强大、最完备,同时也是体量最重的状态机框架。它不仅支持基础的状态流转,还支持嵌套状态(Substates)并行状态(Orthogonal Regions)状态持久化伪状态(Choice/Junction)事件监听拦截器以及与 Spring Security的无缝集成。在需要严格事务控制、分布式状态恢复以及复杂工作流的大型企业级架构中,它是不可替代的利器。原创 2026-05-19 23:31:05 · 558 阅读 · 0 评论 -
CEP——复杂事件处理概述
1、CEP概述2、CEP 的核心工作原理3、核心应用场景4、主流的CEP框架5、核心代码示例(以 Flink CEP 为例)6、CEP 与状态机(State Machine)的区别CEP(Complex Event Processing,复杂事件处理)框架是一种用于在分布式、高并发的数据流中,实时检测、分析和组合多个简单事件,从而识别出具有特定业务特征的“复杂事件”(复合事件)的技术架构。简单来说,传统的数据库和大数据处理(如 MapReduce)是“数据静止,查询游走”;原创 2026-05-19 17:48:00 · 488 阅读 · 0 评论 -
状态机——Cola-StateMachine状态流转
我们使用状态机 Builder,确认状态流转模式(Transition),接收状态(From),定义动作(On),检查条件(When),执行事件(Perform),然后返回目标状态(To)。描述:订单起始状态发生在部分发货状态下,当发生发货时执行状态流转,当满足 CheckCondition(订单部分发货条件)时,执行DeliverOrderAction,执行成功则返回状态:部分发货。当有新订单事件的增加时,在此状态机中增加相应事件即可,同时维护好订单事件与事件实现方法之间的关系。原创 2026-05-19 17:24:54 · 551 阅读 · 0 评论 -
状态机——Cola-StateMachine
/ 状态PENDING_PAY("待付款"),PENDING_DELIVER("待发货"),PENDING_RECEIVE("待收货"),PENDING_COMMENT("待评价"),COMPLETED("已完成"),CANCELLED("已取消");// 事件USER_PAY("用户支付"),MERCHANT_DELIVER("商家发货"),RECEIVE_PACKAGE("收到包裹"),COMMENT("评价"),COMMENT_TIMEOUT("超时未评"),原创 2026-05-19 15:29:07 · 597 阅读 · 0 评论 -
状态机——状态模式实现订单状态流转
在状态模式中,我们将每一个状态都封装成一个类。状态的流转不再是一堆恶心的 if-else 或 switch-case,而是让状态对象自己去决定下一个状态是谁。上下文负责维护当前的订单状态,并暴露出触发事件的接口。// 持有当前的状态对象// 初始状态:对应图中的“开始” -> “待付款”// ========== 暴露给外部业务的事件方法 ==========//用户支付//商家发货//收到包裹//评价//超时未评价//手动取消支付//超时未支付。原创 2026-05-19 00:01:13 · 366 阅读 · 0 评论 -
状态机——事件流中带时间窗口的事件合成
引入时间窗口(Time Window)是分布式事件流处理(如 Flink/Spark Streaming)中非常经典的场景。加入时间窗口意味着:子事件不仅要满足逻辑表达式,而且所有参与合成的子事件,其发生的时间差不能超过规定的范围(例如 5 分钟内)。一旦超出这个窗口,之前收到的过期事件应当被“清空”或“失效”,状态机需要重新等待新的事件流。原创 2026-05-18 21:21:38 · 246 阅读 · 0 评论 -
状态机——事件流中的事件合成
对于这种包含复杂逻辑嵌套(与、或、顺序流转)的连续子事件流,如果单纯用前面提到的基础状态机(比如一个状态变量或简单的集合),代码会变得极难扩展且容易写出“屎山”。有一组连续的子事件流,类似1, 2, 3, 4, 5,6…,子事件会合成事件,逻辑类似与(1 & 2 & (3 | 4)) & 5,如何用状态机实现。最经典的实现方式是双栈法(Dijkstra’s Shunting-yard 算法的变体),一个栈用来存操作数(Node),另一个栈用来存操作符(由于我们的事件都是数字,这种方法实现起来最快、最直观。原创 2026-05-18 20:39:54 · 397 阅读 · 0 评论 -
状态机——并行分支聚合
INIT , // 初始状态 A_DONE , // A部分完成 B_DONE , // B部分完成 C_DONE , // C部分完成 D;// 最终合成态 D } // 触发的事件(比如三个部门分别审批、或三个组件分别就绪) enum Event {INIT , // 初始状态 A_DONE , // A部分完成 B_DONE , // B部分完成 C_DONE , // C部分完成 D;原创 2026-05-18 16:00:53 · 232 阅读 · 0 评论 -
状态机——枚举实现简单状态机
优点:避免了密集的 if-else 或 switch-case传统的做法通常是在一个方法里写一大堆 if (status == CREATED) { … } else if …。使用枚举将行为内聚到各个状态内部,代码极其清晰。线程安全与单例保证Java 的枚举实例底层是高级单例,JVM 保证了它们的线程安全和全局唯一性。强类型校验编译器会强制要求你流转后的状态必须也是 OrderState 之一,不会出现拼写错误或传入非法状态码的情况。原创 2026-05-18 15:00:49 · 242 阅读 · 0 评论
分享