我需要在 Mysql 中创建一个队列表,该表将由 Java 应用程序访问,队列中的作业由使用 PHP 的 Web 应用程序生成。
队列必须以先进先出的方式工作,除非具有高度优先级的任务已排队。
任务完成后,它将被删除。
我的队列表如下所示:
CREATE TABLE `queue` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`priority` int(11) NOT NULL DEFAULT '10',
`status` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_prio_id` (`priority`,`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
由于我的 Java 应用程序是多线程的,我需要使队列选择语句是线程安全的,因此每个任务仅处理一次。
选择/更新语句是什么样的?
最佳答案
SQL 不是存储队列的好地方。像 ActiveMQ 这样的 JMS 服务器就是为了完成此任务而设计的。
无论如何......
您可以通过锁定对此表的访问来在 Java 中进行同步。然后,您需要一个查询来获取最小 id
的行,并使用另一个查询来删除它。
关于java - Mysql中的队列系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27355932/