Node配置中的多个RabbitMQ或其他后端服务器

时间:2015-08-07 23:26:32

标签: javascript node.js rabbitmq

我在DevOps中,我们的开发人员坚持认为他们在Node.js中编写的软件只能指向一个单一的后端服务器,无论是数据库,Web服务器还是RabbitMQ服务器,因为Node.js存在缺陷。这对我来说听起来很疯狂。怎么可能?

local.js文件

中考虑这一点
    rabbitmq:{
        host: "rabbit01.stage",
        port: 5672,
        username : "user",
        password : "pass",
        exchangeName: "exchange_blah",
        queueName: "queue_blah",
        name : "rabbit",
        max : 10
    }

将配置更改为

            host: ["rabbit01.stage", "rabbit02.stage" ],

打破了应用程序并试图在localhost:5672

上找到兔子服务器

我的Google-fu让我失望,因为我不确定如何将这个问题正确地形成一个可搜索的短语。

我在这里遗漏了什么吗?或者我们的开发人员应该RTFM?

1 个答案:

答案 0 :(得分:3)

你正在寻找什么(你清楚地知道这一点)正在聚集。您可以将您的开发人员指向这篇文章:https://www.rabbitmq.com/clustering.html

但是,下面有一个关键段落讨论连接到群集配置:

通常,不建议将节点主机名或IP地址烘焙到客户端应用程序中:这会引入不灵活性,并且如果群集配置发生更改或群集中的节点数发生更改,则需要编辑,重新编译和重新部署客户端应用程序。相反,我们建议采用更抽象的方法:这可能是一个动态DNS服务,它具有非常短的TTL配置,或普通的TCP负载均衡器,或者通过心脏起搏器或类似技术实现的某种移动IP。通常,管理集群内节点连接的这一方面超出了RabbitMQ本身的范围,我们建议使用专门为解决这些问题而设计的其他技术。

这样做的要点是开发人员应该只尝试维护与单个DNS条目的连接,并且应该使用某种基于DNS或IP的负载平衡来防止代码必须知道多个连接。 / p>

同一篇文章中列出了一些好处,其中大多数都归结为在代码中处理此代码会增加代码的复杂性。通常情况下,负载平衡器更擅长这样做,因为它们是专门构建的,并且理解这样做的复杂性。

如果开发人员需要在代码中处理此问题,则他们必须编写负载均衡器或动态DNS查找的软件版本。与使用网络设备来处理需求相比,这更容易出错和误算。

所以...虽然你是正确的,你的node.js开发人员可以做你想做的......他们在正确的轨道上说他们不应该拥有< / em>这样做是因为与在硬件/网络层中进行相比,在代码中执行此操作是个坏主意。