# 启路框架-qilu-state的示例 **Repository Path**: senvon/state-demo ## Basic Information - **Project Name**: 启路框架-qilu-state的示例 - **Description**: 启路框架-交易一致性问题的轻量级解决方案 本仓库是qilu-state的一个完整示例,演示了如何在一个比较复杂业务逻辑下面,使用state-core进行编程,使得任意服务器的宕机都不影响当前的业务 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-03-31 - **Last Updated**: 2022-03-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目介绍 本项目用于对qilu-state的示例,给出一个示例的多订单多状态的模拟处理流程,在任意停机,任意关闭服务的情况下,结合qilu-task实现在5分钟内,所有的订单状态都会保持一致. # 懒人构建 有2种方法直接构建 1. 将settings-hw.xml拷贝到${user.home}/.m2 2. 直接命令行运行mvn -s settings-hw.xml clean package # 项目启动 1. 执行数据库脚本,sql/ddl.sql 这个sql是mysql语法,如果要其他数据库的,需要转换 2. 配置数据源,分别在MockRunner.java和StateSampleRunner.java中,自行修改数据源的连接 3. 配置MQ,项目中支付通知和发货通知都是使用MQ进行,配置文件在mock/main/resources/config/conf.properties和state/main/resources/config/conf.properties中 # 项目访问 使用http客户端,发送http请求 http://stateip:stateport/state/addOrder.do ```code 请求报文如下 POST /state/addOrder.do HTTP/1.1 Accept: application/json, text/javascript, */*; q=0.01 Content-Length: 28 Content-Type: application/x-www-form-urlencoded Host: localhost:18080 name=senvontest1&amount=12.3 ``` # 测试过程 1. 可以使用jmeter发送报文,以10笔/s的速度发送 2. 中间任意停止mock和state进程多次,中间一般有订单会处于处理中,或者处理后事务提交前的状态 3. 等待5-10分钟,所有订单状态都会处于终结状态,而且相关订单状态一致 请根据下面的状态检查相关订单状态一致 表名|状态|说明 -|-|- orderInfo|1-noPay|处于刚刚发起订单状态,还没有支付 orderInfo|2-Paying|处于支付中状态,可能未发起支付,可能已经发起支付在等待支付结果 orderInfo|6-PayFail|支付失败状态,终结状态,一定需要关联orderPay的订单状态为支付失败,也一定需要关联applyInfo中type=1的申请的状态为处理失败 orderInfo|3-Payed|支付成功状态,还没有创建发货订单 orderInfo|4-Sending|发货中状态,可能未发起发货,可能已经发起发货等待发货结果 orderInfo|5-Success|订单成功状态,终结状态,代表当前的订单处理完成 -|-|- orderPay|1-Wait|处于刚刚创建记录的状态,还没有调用payApply接口 orderPay|2-Processing|处于支付中状态,可能未发起支付,可能已经发起支付在等待支付结果 orderPay|3-Success|支付订单通知成功,终结状态 orderPay|4-Fail|支付订单通知失败,终结状态 -|-|- orderGoods|1-Wait|处于刚刚创建记录的状态,还没有调用goodsApply接口 orderGoods|2-Processing|处于发货中状态,可能未发起发货,可能已经发起发货在等待发货结果 orderGoods|3-Success|发货订单通知成功,终结状态 orderGoods|4-Fail|发货订单通知失败,终结状态 -|-|- ApplyInfo|1-Wait|处于刚刚创建记录的状态,还没有处理 ApplyInfo|2-Processing|处于处理中 ApplyInfo|3-Success|处理成功,终结状态 ApplyInfo|4-Fail|处理失败,终结状态 # 项目结构 ## mock-service-website mock-service-webiste 是模拟的一个远程http接口,主要模拟了以下接口 接口名|含义 -|- payApply|主要用于模拟创建一个支付订单,在state-sample-website中,会发起一个订单支付请求 searchPay|主要模拟查询一个支付订单,在订单支付请求发起失败,用于后续的补单查询 goodsApply|主要用于模拟发货请求,在支付完成以后,进行发货操作,发货不允许失败 searchGoods|用于模拟发货查询接口,在发货失败以后,查询发货状态 ## state-sample-website state-sample-website,是state-core的主要载体,用于模拟流程的实现. 订单状态如下图 ![流程示意](state-sample.jpg)