我正在寻找排队到磁盘而不是内存的BlockingQueue的功能。我宁愿避免使用重量级解决方案(例如JMS)。理想情况下,队列应该在JVM上与客户端(生产者)和使用者在同一进程中运行。如果消费者被停止,它应该能够继续排队,并且还能在重新启动后继续排队。
答案 0 :(得分:1)
如何在关系表的顶部进行黑客攻击?这种方法有一些优点。
它可能是反模式,有时也是。存在陷阱(特别是在没有特别注意的情况下争用可能很高)。
但是也有一些有意义的优势:您可以将队列数据与其他数据集成,获得ACID语义,您可以获得一致的备份(您无法通过任何外部队列获得这些备份,因为您无法在与数据库完全相同的时间,并在项目中使用新技术进行保存。
为每个队列项分配一个状态和索引。
这是一种简单的争用管理技术:为每个队列行添加一个随机数。出列时,请求select TOP 1 * from QueueTable where RandomNumberColumn > RAND() order by RandomNumberColumn
。这样就可以从随机位置获取一个项目,从而大大减少由于X锁定造成的阻塞。