我们需要处理多个节点需要花费大量时间(解析大量xml文件并将数据插入到数据库中)的任务。节点不会很多,我们甚至会从一个节点开始。
将从FTP读取文件。这项工作将按计划进行,并将每天进行一次。分发处理的好方法是什么?
我目前的草案想法是:
ConcurrentMap
- 它处理场景背后的地图同步.putIfAbsent(..)
迭代列表 - 如果文件不在地图中,则处理它。如果它在地图中,则表示另一个节点正在处理它,因此请尝试下一个文件。那样:
.putIfAbsent(..)
调用中的争用开销很少,而且基础同步(改组也意味着改善这一点)我不确定这是否是最佳方法。可以吗?有什么可以改进的?还有更好的吗?
答案 0 :(得分:1)
根据您的意见,我建议考虑使用JMS,(就像我发现最简单的使用/开发的ActiveMQ)
它可以是独立的,冗余的和/或嵌入的。
您可以将消息添加到队列并从任意数量的节点使用。关闭自动提交后,失败的节点消息将自动返回队列。