目录
场景
N 个生产者往 db 里面插入新任务,N 个消费者从 db 取出新任务执行并更新任务状态为“已执行”。
CREATE TABLE `t_job_queue` (
`id` INT NOT NULL AUTO_INCREMENT,
`status` INT NOT NULL DEFAULT '0',
`params` VARCHAR(1024) NOT NULL DEFAULT '',
`result` VARCHAR(1024) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
关键问题
避免多个消费者取到同一个新任务。
有问题的解决方案
方案1 - 锁表
LOCK TABLES t_job_queue WRITE, t_job_queue as t1 READ;
SELECT id, status, params FROM t_job_queue WHERE status=