我们需要处理多个节点需要花费大量时间(解析大量xml文件并将数据插入到db)的任务。节点不会很多,我们甚至要从一个节点开始。
这些文件将从FTP中读取。这项工作将安排好,每天进行一次。什么是一个好的和容易的方式来分发处理?
我目前的想法是:
ConcurrentMap -它处理场景后面映射的同步。.putIfAbsent(..)迭代列表--如果文件不在映射中,则处理它。如果它在映射中,这意味着另一个节点正在处理它,所以尝试下一个文件。这条路:
.putIfAbsent(..)调用和底层同步中很少会出现争用开销(改组也是为了改善这一点)。但我不确定这是否是最好的方法。可以吗?还有什么可以改进的?还有更好的吗?
发布于 2012-08-15 12:56:18
基于您的评论,我建议考虑使用JMS (比如我认为使用/开发最简单的ActiveMQ )。
它可以是独立的、冗余的和/或嵌入的。
您可以将消息添加到队列中,并从任意数量的节点中使用。在自动提交关闭后,失败的节点将自动返回消息到队列。
https://stackoverflow.com/questions/11968568
复制相似问题