Jms ActiveMQ-工作线程和任务池

Jms ActiveMQ-工作线程和任务池,jms,activemq,worker,Jms,Activemq,Worker,我有以下情况: 调用某些操作,从而创建多个任务(千个) 它们(状态和详细信息)存储在数据库表中 我需要在多个节点上以某种方式执行这些任务 因此,显而易见的方法是为每个创建的任务发送一条JMS消息(10000个任务-10000条消息),一个消费者池(每个节点)将执行这些任务-但这看起来有点过分-侦听器需要从DB获取任务-无论如何,通知它应该在下一个任务中工作就足够了,就好像-发送一条消息一样(“完成下一个任务”),并以某种方式将其设置为交付10000次 如何做到这一点?发送10000条消息真的

我有以下情况:

  • 调用某些操作,从而创建多个任务(千个)
  • 它们(状态和详细信息)存储在数据库表中
  • 我需要在多个节点上以某种方式执行这些任务
因此,显而易见的方法是为每个创建的任务发送一条JMS消息(10000个任务-10000条消息),一个消费者池(每个节点)将执行这些任务-但这看起来有点过分-侦听器需要从DB获取任务-无论如何,通知它应该在下一个任务中工作就足够了,就好像-发送一条消息一样(“完成下一个任务”),并以某种方式将其设置为交付10000次

如何做到这一点?发送10000条消息真的是最好的主意吗

另外,ActiveMQ有一个消息调度的东西[1]——可能只是将周期设置为0,然后重复设置为10000?这是否正确?除了上面提到的方法之外,还有更好的方法吗


[1]

实际上,您可以使用Redis存储已完成任务的ID(1..n),并使用“set”数据结构

密钥将类似于任务列表:

每个键将包含已完成任务的ID

因此,当您使用1000个异步任务启动某个作业时。您将为此作业生成一些唯一的id,并使用任务id发送,任务何时完成,工作人员(处理此任务的人员)应将此id添加到DB(Redis)中。当最后一个工作人员将id保存在DB中,并将任务大小设置为相等时(您应在每个任务后检查)-所有任务已完成,因此您可以发送另一条消息或进行其他操作

Redis提供非常快速的访问和非常少的数据结构