0

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

但是,我不确定如何处理制作人。我一次只需要一个生产者运行,因为我的系统生产部分的负载不是太高,但我想要一种可靠的方式来管理它,比如启动、停止、重新启动,主要是监控它,以便如果生产者主机出现故障,另一台可以接机。

如果它有帮助,我对我的消费者算法感到满意,即排队作业的算法,因为它可以容错一段时间停机并拾取停机期间发生的事情。

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

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

4

1 回答 1

0

经过几周的思考,我想到了最简单的解决方案,我实际上对此非常满意,所以我会分享它以防你觉得它有用,或者如果你认为有任何缺点,请指出,它到目前为止似乎工作正常。

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

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

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

于 2012-12-20T17:12:03.393 回答