数据一致性组件之任务模型
任务模型
业内处理数据一致性的处理方案有许多,我们目前的业务并不要求数据强一致性,最终一致性即可。
我们参照本地消息表的设计了一个以任务为模型的一致性组件。
什么是任务:将需要保障一致性的业务逻辑封装为一个任务。
比如在入库实操反馈时:
操作 1:完结单据、调度任务
操作 2:发送 mq 消息
其中操作 1 和操作 2 我们封装为一个任务。
在代码层面,多个业务逻辑对应的方法以注解@WesConsistencyTask
声明,通过 SpringAOP 机制封装成任务落地到数据库,我们用的是 MySQL。
数据模型
字段名 | 类型 | 允许为空 | 默认值 | 说明 |
---|---|---|---|---|
id | BIGINT | 否 | 自增 | 主键自增 |
gmt_create | DATETIME | 否 | CURRENT_TIMESTAMP | 创建时间 |
gmt_modified | DATETIME | 否 | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 修改时间 |
task_id | VARCHAR(500) | 否 | - | 任务唯一标识(用户自定义或方法签名) |
state | TINYINT | 否 | 0 | 任务状态:0待执行 1执行中 2执行成功 3执行失败 |
execute_times | INT | 否 | 0 | 已执行次数 |
next_execute_time | DATETIME | 否 | - | 下一次执行时间 |
parameter_types | VARCHAR(255) | 否 | - | 参数类型(类全路径) |
method_name | VARCHAR(100) | 否 | - | 方法名 |
method_sign_name | VARCHAR(200) | 否 | '' | 方法签名 |
execute_interval_second | INT | 否 | 60 | 执行间隔秒 |
delay_time | INT | 否 | 60 | 初始延迟秒 |
task_parameter | VARCHAR(200) | 否 | '' | 任务参数(序列化字符串) |
execute_mode | TINYINT | 否 | - | 执行模式:1立即执行 2调度执行 |
thread_way | TINYINT | 否 | - | 线程模型:1异步 2同步 |
error_message | TEXT | 是 | NULL | 最后一次执行的错误信息 |