容错/高可用性生产者

时间:2012-12-18 00:26:36

标签: activemq rabbitmq

我正在使用消息传递队列处理分布式生产者/消费者系统。我对并行化感兴趣的部分是它的消费者方面,我对我所拥有的东西很满意。

但是,我不知道如何处理制片人。我只需要一个生产商一次运行,因为我的系统生产部分的负载不是太高,但我想要一种可靠的管理方式,如启动,停止,重启,主要监控它,以便生产者主机失败,另一个人可以拿起。

如果它有所帮助,我对我的消费者算法感到满意,这是一种排队工作的算法,因为它可以容忍一段时间内的故障并且能够接收在它停机期间发生的事情。

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

我正在使用rabbitmq,但是如果需要的话,可以使用activemq,甚至可以使用activemq,甚至重构一下,我的代码到目前为止并不复杂。

1 个答案:

答案 0 :(得分:0)

经过几个星期的思考,最简单的解决方案浮现在脑海中,我真的很满意它,所以我会分享它,以防你发现它有用,或者指出你是否想到任何缺点是,到目前为止似乎工作正常。

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

我每5分钟启动一次所有潜在的生产者(石英),如果ts字段比现在()(5分钟)更长,他们会更新表格。因为更新调用是阻塞的,所以我没有数据库线程问题。现在,如果更新返回> 0表示它实际上修改了ts的值,然后执行实际的生成代码(队列作业)。如果更新返回0,它没有修改表,因为其他人在不到5分钟前完成了,因此这个生产者在5分钟内再次检查之前不会做任何事情。

显然,5分钟的值是可配置的,如果我有这样的需要,这允许进行非常简洁的升级,只需很小的更改就可以同时执行多个生产者。