Activemq 容错/高可用性生产者

Activemq 容错/高可用性生产者,activemq,rabbitmq,Activemq,Rabbitmq,我正在使用消息队列开发分布式生产者/消费者系统。我对并行化感兴趣的部分是它的消费者方面,我对我所拥有的感到满意 然而,我不知道该如何处理制片人。我一次只需要运行一个producer,因为我的系统的生产部分的负载不是太高,但是我想要一种可靠的管理它的方法,比如启动、停止、重新启动,主要是监视它,以便在producer主机出现故障时,另一个可以接管 如果有帮助的话,我对我的消费者算法很满意,这是一种对工作进行排队的算法,因为它可以容错地停机一段时间,并拾取停机期间发生的内容 我确信有工具或至少已知的

我正在使用消息队列开发分布式生产者/消费者系统。我对并行化感兴趣的部分是它的消费者方面,我对我所拥有的感到满意

然而,我不知道该如何处理制片人。我一次只需要运行一个producer,因为我的系统的生产部分的负载不是太高,但是我想要一种可靠的管理它的方法,比如启动、停止、重新启动,主要是监视它,以便在producer主机出现故障时,另一个可以接管

如果有帮助的话,我对我的消费者算法很满意,这是一种对工作进行排队的算法,因为它可以容错地停机一段时间,并拾取停机期间发生的内容

我确信有工具或至少已知的模式可以做到这一点,而不是重新发明轮子


我正在使用rabbitmq,但可以使用activemq,甚至可以在需要时重构为storm或类似的东西,我的代码到目前为止并不复杂。

经过几周的思考,我想到了最简单的解决方案,实际上我对它非常满意,所以我将与您分享它,以防您发现它有用,或者指出它的缺点,到目前为止,它似乎运作良好

我在数据库中创建了一个最简单的表,称为heartbeat,其中有一个称为ts的时间戳字段,意味着始终只有一行

我每5分钟启动一次所有潜在的生产者(quartz),如果ts字段比现在旧()-5分钟,他们会更新表。因为更新调用被阻塞,所以我不会有db线程问题。现在,如果更新返回>0,这意味着它实际上修改了ts的值,然后我执行实际的生成代码(队列作业)。如果更新返回0,则它不会修改该表,因为其他人在不到5分钟前修改了该表,因此该生产者在5分钟后再次检查之前不会执行任何操作


很明显,5分钟的值是可配置的,这允许一个非常简洁的升级,如果我需要的话,可以进行一些小的更改,以便能够同时执行多个制作人。

有些是我投票选过的好答案,我从他们中的许多人那里学到了,但不幸的是,没有一个是“正确的”答案,因此,我可以自信地将它标记为其他用户可以直接找到的有效方法,作为我所暴露问题的解决方案。(我没有理由不接受答案,是免费的:))此外,您可能希望将此问题重新标记为更合适的问题-可能与监控相关,因为它与您的排队技术没有直接关系。我接受了几个答案,感谢您的提示。对标签有什么建议吗?我对这方面的技术一无所知,只是选择了这两个来吸引有经验的人,而不仅仅是理论。你能详细介绍一下你的架构吗。例如,为什么要创建任意数量的生产者?从队列并行消费正是消息传递的目的;然而,并行“生产”并没有多大意义。我们的想法是,你有一个未知的(但有些可预测的)生产商数量,你的消费者应该能够处理生产商给他们带来的负担。是的,2006年5月,我一次只想要一个生产商。我正在寻找的是有一种可靠的方法来确保,如果一个失败,另一个将自动开始生产。