我在几个远程服务器上安装了Rails应用程序。 Rails应用程序生成财务事务,我希望所有远程服务器将此元数据发送到中央集线器,并将其存储在关系数据库中。可能是交易上的其他处理任务。这些服务器不在我的控制之下,所以我不能保证不断连接到互联网。他们将每天至少连接几个小时连接到互联网。
RabbitMQ对这种架构有用吗? Exchange和队列将安装在远程服务器上(以及Producer Rails应用程序),对吗?我是否每个远程服务器都有一个消费者服务,或者我可以为所有远程服务器/队列提供一个中央消费者服务吗?
奖金问题,因为我在RabbitMQ世界中是一个菜鸟:
答案 0 :(得分:1)
由于系统严重断开的性质(这不是AMQP系统的典型用途,我不认为),以及您每天只需要推几次的事实,我想知道如果你不能更好地跳过整个AMQP / RabbitMQ的东西,而是直接写入具有计划任务的本地数据库,以便每晚将该数据推送到中央服务器。
请记住,RabbitMQ是一种消息代理服务,具有存储消息的固有能力 - 而不是消息存储服务。该服务的主要目的是将消息与其发布系统断开连接,并将其推送到需要的位置,通常是以实时方式。另一方面,数据库当然是存储系统,有很多以非实时方式推送数据的选项。
话虽如此,这里有关于RabbitMQ的一些想法:
首先,一些上下文会有所帮助:我们不知道您的rails服务器每天处理和想要推送的事务数量。每天1个?每天100万?
关于队列中的积压消息:RabbitMQ(显然)非常可扩展,我认为这不应该是消息服务本身的问题(这里有关于如何管理队列的网站的一些信息:{{ 3}})
可用内存和硬盘空间(如果配置正确)应该是可以加载到队列中的邮件数量的限制因素。
http://www.rabbitmq.com/blog/2011/10/27/performance-of-queues-when-less-is-more/
https://www.rabbitmq.com/blog/2012/04/25/rabbitmq-performance-measurements-part-2/
https://www.rabbitmq.com/maxlength.html
关于消费者设置,我认为您没有任何理由不能连接到各种RabbitMQ服务器的中央服务。当然,您需要运行单独的连接和通道(并且您可能希望运行一些此实例来帮助循环传入消息)。
关于交换类型:Direct似乎适合这个,是的。