【问题标题】:Is there a durable queue library for the JVM?是否有适用于 JVM 的持久队列库?
【发布时间】:2012-12-01 15:37:55
【问题描述】:

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

【问题讨论】:

  • 如何破解关系表的顶部?这种方法有一些优势。
  • 这很诱人,但我已经阅读了几篇关于将队列作为数据库作为反模式的文章,所以我对采用这种方法有点不安。我见过一些使用berkley db(java版)的解决方案

标签: architecture asynchronous queue message-queue


【解决方案1】:

如果在关系表的顶部破解它呢?这种方法有一些优势。

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

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

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

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

【讨论】:

  • 我决定使用 Berkeley DB (Java)。它是嵌入式的,低级 api 似乎非常适合队列实现。
猜你喜欢
  • 2022-01-23
  • 2013-04-12
  • 2017-06-28
  • 2016-08-26
  • 2012-11-05
  • 2013-08-25
  • 2011-07-29
  • 2011-02-26
  • 2011-12-22
相关资源
最近更新 更多