Architecture JVM是否有一个持久的队列库?

Architecture JVM是否有一个持久的队列库?,architecture,asynchronous,queue,message-queue,Architecture,Asynchronous,Queue,Message Queue,我正在寻找一个BlockingQueue的功能,它排队到磁盘而不是内存。我宁愿避免重量级解决方案(例如JMS)。理想情况下,队列应该与JVM上的客户机(生产者)和消费者在同一进程中运行。如果消费者停止,它应该能够继续排队,并且在重新启动后仍能生存。在关系表上对其进行黑客攻击怎么样?这种方法有一些优点 这可能是一种反模式,有时也是。存在陷阱(特别是在没有特别注意的情况下,争论可能会很激烈) 但也有一些有意义的优势:您可以将队列数据与其他数据集成,获得ACID语义,获得一致的备份(这是任何外部队列都

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

在关系表上对其进行黑客攻击怎么样?这种方法有一些优点

这可能是一种反模式,有时也是。存在陷阱(特别是在没有特别注意的情况下,争论可能会很激烈)

但也有一些有意义的优势:您可以将队列数据与其他数据集成,获得ACID语义,获得一致的备份(这是任何外部队列都无法获得的,因为您无法在与DB完全相同的时间对其进行备份),并且在项目中使用新技术进行保存

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


下面是一种简单的争用管理技术:向每个队列行添加一个随机数。当退出队列时,要求从QueueTable where RandomNumberColumn>RAND()order by RandomNumberColumn中选择前1*。这将为您提供一个从随机位置获取的项,从而大大减少了由于X锁定而造成的阻塞。

如何在关系表顶部对其进行黑客攻击?这种方法有一些优点。这很诱人,但我读过一些关于队列的文章,因为数据库是一种反模式,所以我对采用这种方法有点不放心。我见过一些使用berkley db(java版)的解决方案,我决定使用berkley db(java)。它是嵌入式的,低级api似乎非常适合队列impl。