我有以下情况:
因此,显而易见的方法是为每个创建的任务发送JMS消息(10000个任务 - 10000个消息),并且消费者的池(每个节点)将执行它们 - 但这看起来像是一种矫枉过正 - 听众需要无论如何从DB获取任务,只需通知它它应该可以工作下一个任务,就像 - 发送一条消息(“工作下一个任务”)并以某种方式将其设置为交付10000次一样。
如何处理?发送10000条消息真的是最好的主意吗?
另外,ActiveMQ有这个消息调度的东西[1] - 也许只是将周期设置为0并重复到10000?这会正常吗?除了上面提到的那些之外,还有更好的方法吗?
[1] http://activemq.apache.org/delay-and-schedule-message-delivery.html
答案 0 :(得分:0)
实际上,您可以使用Redis存储已完成任务的ID(1..n)。并使用" set"数据结构。
键看起来像任务列表:
每个密钥都包含已完成任务的ID。
所以,当你开始一些有1000个异步任务的工作时。您为此作业生成一些唯一ID,并使用任务ID发送,当任务完成时,worker(处理此任务的人)应在DB(Redis)中添加此ID。当最后一个工作人员在DB中保存id并设置相同大小的任务(你应该在每个任务之后检查它) - 所有任务都已完成,这样你就可以发送另一条消息或者做任何其他事情。
Redis提供非常快速的访问和非常快速的数据结构。