我有 2 台相同的独立 JBoss 5.1 服务器。我正在编写一个定期唤醒以处理队列的应用程序,该队列在 Oracle 数据库中实现为表。
伪代码是:
- 醒来。
- 现在的时间是早上 7 点到晚上 7 点之间吗?如果是,请继续。如果没有,请继续睡 5 分钟。
- 读取“队列”表中第一行的内容
- 将 HTTP POST 发送到另一台服务器,其中包含在步骤 3 中读取的内容。
- 如果 POST 成功,则删除该行。否则,将行留在表中。
- 移动到下一行并重复步骤 3-5,直到表格结束。
- 睡5分钟。
我的问题是:如何确保一行不被处理两次(导致两个 POST)?
是否有我可以利用的 JavaEE 注释,或者 JBoss 内置的锁定机制?
理想的解决方案将导致应用程序以相同的方式部署到两台服务器;也就是说,同一个应用程序驻留在两个节点中。