我在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?
答案 0 :(得分:3)
你正在寻找什么(你清楚地知道这一点)正在聚集。您可以将您的开发人员指向这篇文章:https://www.rabbitmq.com/clustering.html
但是,下面有一个关键段落讨论连接到群集配置:
通常,不建议将节点主机名或IP地址烘焙到客户端应用程序中:这会引入不灵活性,并且如果群集配置发生更改或群集中的节点数发生更改,则需要编辑,重新编译和重新部署客户端应用程序。相反,我们建议采用更抽象的方法:这可能是一个动态DNS服务,它具有非常短的TTL配置,或普通的TCP负载均衡器,或者通过心脏起搏器或类似技术实现的某种移动IP。通常,管理集群内节点连接的这一方面超出了RabbitMQ本身的范围,我们建议使用专门为解决这些问题而设计的其他技术。
这样做的要点是开发人员应该只尝试维护与单个DNS条目的连接,并且应该使用某种基于DNS或IP的负载平衡来防止代码必须知道多个连接。 / p>
同一篇文章中列出了一些好处,其中大多数都归结为在代码中处理此代码会增加代码的复杂性。通常情况下,负载平衡器更擅长这样做,因为它们是专门构建的,并且理解这样做的复杂性。
如果开发人员需要在代码中处理此问题,则他们必须编写负载均衡器或动态DNS查找的软件版本。与使用网络设备来处理需求相比,这更容易出错和误算。
所以...虽然你是正确的,你的node.js开发人员可以做你想做的......他们在正确的轨道上说他们不应该拥有< / em>这样做是因为与在硬件/网络层中进行相比,在代码中执行此操作是个坏主意。