RabbitMQ是否包含处理脱机目标节点的功能

时间:2015-07-28 20:28:47

标签: rabbitmq federated

作为RabbitMQ的新手,我想知道如何处理离线目标节点。

作为这种情况的一个例子:

  • 1日志记录应用程序,用于将日志存储到某个持久存储
  • N日志发布应用程序,希望通过日志记录服务器将其日志写入持久存储。

有两种选择:

  1. 每个发布应用程序将其日志消息发布到其本地RabbitMQ实例,日志记录服务器必须订阅其中的每一个
  2. 日志记录应用程序具有本地RabbitMQ实例,每个日志发布应用程序都会在其上发送消息。
  3. 选项1要求我在每次出现或移动新应用程序时重新配置/重新编码/通知录制应用程序。因此我认为选项2是正确的,每个新的发布应用程序只是写入录制应用程序的RabbitMQ节点。

    我唯一要努力的是如何处理录制应用程序节点关闭的情况。我是否需要构建自己的系统来存储消息,直到它重新联机或者我可以使用RabbitMQ的某些功能来处理它?即每个发布应用程序的本地RabbitMQ是否只是收到消息并在它重新联机后立即将它们转发到录制应用程序RabbitMQ?

    我发现联邦插件的某些内容无法理解,如果这是解决方案。也许我需要一些不同的东西,或者我必须编写自己的本地排队系统(我希望我没有必要)在目标节点离线时对消息进行排队。

    非常欢迎任何建筑实例或解决方案的链接。

    BTW:https://groups.google.com/forum/#!topic/easynetq/nILIKSjxyMg声明您不应该为每个应用程序安装RabbitMQ节点,所以也许我应该使用像MSQM或ZeroMQ(?)

    这样的东西

1 个答案:

答案 0 :(得分:0)

根据听起来类似情况的经验,我建议在离线时使用除队列之外的其他内容来本地存储消息。

多年前,我构建了一个必须脱机工作的系统 - 根本没有网络连接 - 然后当笔记本电脑被带回办公室时,必须通过消息队列将消息推送到中央服务器。

我通过使用本地数据库(当时是sqlite)来解决这个问题,以便在消息队列不可用时存储我的消息。

你应该做类似的事情。当RabbitMQ脱机时,使用本地数据库甚至纯文本文件或CSV文件存储您的消息。重新连接时,从本地文件系统读取消息并通过RabbitMQ发送。

这是一个很好的使用策略,即使您不希望RabbitMQ下线。坦率地说,它会在某个时候离线,你将不得不处理它。您应该为这种情况做好准备,并为您的消息建立本地商店将有助于此。

...

关于每个应用程序的rqm节点:坏主意。这给您的系统增加了大量的复杂性。你想要尽可能少的RabbitMQ节点。意思是,每个系统1个(系统由许多应用程序组成)在可能的情况下......除了RabbitMQ集群的可用性之外 - 完全是另一行问题和设计。

...

我采访了Aria Stewart关于使用RabbitMQ和消息传递系统设计失败的问题,并在她谈到how networks fail时有一个小摘录。

重点是,网络或RabbitMQ或其他东西会失败,您将需要像本地数据存储区这样的解决方案,这样您就可以在RabbitMQ重新联机时恢复。