java - Mysql中的队列系统

标签 java mysql multithreading thread-safety queue

我需要在 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/

相关文章:

mysql - SQLAlchemy 核心中是否有 `USING` 子句?

c# - WPF 调度程序性能(100-200 次更新/秒)

multithreading - Delphi:通过报告锁定 "failure"上正在运行的线程的调用堆栈来调试关键部分挂起

java - 您如何在 eclipse 中设置一个 clojure 项目,以便在您单击运行时启动它?

java - "main"类以外的类的通用名称是什么?

php - 棘手的 MySQL 查询涉及 NOT IN

c - 如何使用线程更改函数中的结构变量?

java - 新行中的 PDF 格式的 ArrayList<String>

java - LibGDX 中带有表格布局的菜单不会加载

mysql - 我的数据库外键问题