# 启路框架-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的主要载体,用于模拟流程的实现.
订单状态如下图
