简单的数据库任务队列设计
当我们使用数据库来管理异步任务时,更新服务怎么保证任务中断后还能继续执行? 假设我们有个表 -- TaskStatusInit = 0 -- TaskStatusDoing = 1 -- TaskStatusDone = 2 -- TaskStatusFailed = 3 create table task ( id serial primary key, task_info jsonb, task_status smallint, created_at timestamp default CURRENT_TIMESTAMP, updated_at timestamp default CURRENT_TIMESTAMP, ); 当更新应用或者有意外情况导致task_status一直处于TaskStatusDoing,导致无法继续执行.这时我们可以这样 create table task ( id serial primary key, task_info jsonb, task_status smallint, heartbeat bigint, -- 添加一个心跳字段 created_at timestamp default CURRENT_TIMESTAMP, updated_at timestamp default CURRENT_TIMESTAMP, ); 添加一个心跳字段,在执行过程中定时去更新他,如果超过一定的时间没有更新就说明这个任务已经中断了.这时候我们就可以放心的把状态重置为我们想要的状态了. ...