【发布时间】:2014-08-14 22:47:18
【问题描述】:
我的要求如下
- 在表 (MySQL DB) 中维护记录池。
- 如果条目数低于某个阈值,则作业充当生产者并填满此池。该作业每 15 分钟运行一次。
- 可以有多个消费者,每个消费者只获取一条记录。同时进来的两个消费者应该得到两条不同的记录。
- 生产者不应阻止消费者。因此,当生产者作业正在运行时,消费者应该能够获取任何可用的行。
生产者/消费者是应用程序代码的一部分,它又是一个 JBoss 应用程序。
为了确保每个消费者选择不同的记录(在并发的情况下),我们执行以下操作
- 我们使用整数列作为索引。
- 消费者将首先使用自己的名称更新索引值最低的记录。
- 然后它将选择并提取该记录并继续进行。
- 这种方法可确保两个消费者最终不会得到相同的记录。
我们看到的一个问题是,当生产者填满池时,消费者会被阻塞。由于生产者可能需要一些时间才能完成,因此在此期间的所有消费者都被阻塞,因为消费者的更新等待生产者的插入完成。
有没有办法解决这种情况?也欢迎任何其他设计方法。
【问题讨论】: