0

我正在寻找排队到磁盘而不是内存的 BlockingQueue 的功能。我宁愿避免使用重量级的解决方案(例如 JMS)。理想情况下,队列应该在 JVM 上与客户端(生产者)和消费者在同一进程中运行。如果消费者停止,它应该能够继续排队,并且在重新启动时也能存活。

4

1 回答 1

1

破解关系表的顶部怎么样?这种方法有一些优点。

它可能是一种反模式,有时它是。有一些陷阱(特别是如果没有特别注意,争用可能会很高)。

但也有一些有意义的优势:您可以将队列数据与其他数据集成,获得 ACID 语义,获得一致的备份(任何外部队列都无法获得这些,因为您无法同时备份它作为数据库),您可以在项目中使用新技术保存。

为每个队列项分配一个状态和索引。

这是一个简单的争用管理技术:向每个队列行添加一个随机数。出队时,请求select TOP 1 * from QueueTable where RandomNumberColumn > RAND() order by RandomNumberColumn. 这使您可以从随机位置获取物品,从而大大减少了由于 X 锁定而导致的阻塞。

于 2012-12-13T20:08:42.080 回答