2011-11-22 157 views
0

我正在寻找一个消息队列,它将跨服务器群集复制消息。我知道这会导致性能下降,但这就是要求 - 消息持久性非常重要。复制的消息队列

复制可以是异步的,但它应该在那里 - 如果有大量等待处理的消息积压,它们不应该丢失。

到目前为止,我还没有设法从知名的MQ中找到任何东西。例如HornetQ支持2.0中的消息复制,但在2.2中它似乎被删除。 RabbitMQ根本不复制信息,等等。

有什么可以满足我的要求吗?

+0

因此,您正在寻找一种*保证*消息的形式,您在代理端受到停电或磁盘故障的保护?所以换句话说,一旦经纪人有消息,你几乎可以假设,此后不久,给定异步,你可以失去发行人和经纪人框,并仍然恢复消息? – sdg

+0

是的,我想将邮件复制到另一台机器。 – adamw

回答

2

至少有三种方法可以解决这个问题,这取决于您需要解决方案的强大程度。

一:选择任何通讯技术,然后复制您的磁盘存储。使用类似DRBD的东西,您可以将文件备份的存储复制到另一台机器下。如果您的主盒子死亡,您应该能够从复制文件重新启动第二台计算机。

二:继续寻找。有很多商业系统肯定会这样做,其中两个(我没有经济利益)是Informatica Ultra Messaging(以前是29West)和Solace。这些通常在金融界使用。

三:建立你自己的。 ZeroMQ就是这样一个工具包,您可以使用它来从预先构建的消息传递块滚动您自己的系统。即使是一个不正式支持它的系统也可以很容易地配置为将所有消息发布到两个队列中。你的读者不得不以某种方式消耗,所以这可能是一个非起动器,但在任何情况下都可能。总体而言:测试你的性能假设,因为所有这些假设在各种情况下都会有不同的性能影响。

+0

谢谢! :)我肯定考虑在我的休闲时间里“建立自己的”场景。同时,我在MongoDB之上添加了一个薄层,在复制集中使用时,我可以按照自己的喜好进行操作。 – adamw

0

亚马逊SQS的设计考虑到了这一点,但由于一致性模型(无论如何都是消息传递的一部分),因此您有责任在消费者端重复消息。当然,SQS可能有点慢,成本可能会增加大量的消息,但如果你想保证没有消息丢失,那么这是一个非常稳定的方法。