任务模型

业内处理数据一致性的处理方案有许多,我们目前的业务并不要求数据强一致性,最终一致性即可。

我们参照本地消息表的设计了一个以任务为模型的一致性组件。
什么是任务:将需要保障一致性的业务逻辑封装为一个任务。
比如在入库实操反馈时:

操作 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 最后一次执行的错误信息