区分其他模块中的节点主集群
Posted
技术标签:
【中文标题】区分其他模块中的节点主集群【英文标题】:distinguish node master cluster in other modules 【发布时间】:2014-02-16 08:37:20 【问题描述】:我正在开发一个节点项目,我想通过节点集群运行它。由于我有一些可供每个节点集群(Worker)使用的共享资源和配置,在启动时我读取了这些配置并将其保存到 redis db 中。此外,在其他一些模块中,我还需要查询一些外部资源并获取一些数据并保存到 redis db 中(不是在启动时,当我需要时)。为此,在启动时,我将配置部分放入一个函数中,如果集群是 Master(cluster.isMaster) 则调用它:
if (cluster.isMaster)
configure();
我的问题是如何在其他模块中做同样的事情?在其他模块中,我需要查询外部资源并仅在主集群中放入redis,因为之后它也可用于工作集群。因此,无需在所有集群中查询。
先谢谢了,
【问题讨论】:
试试require('cluster').isMaster
【参考方案1】:
来自 api http://nodejs.org/api/cluster.html
cluster.isMaster# Boolean 如果进程是主进程,则为真。这是 由 process.env.NODE_UNIQUE_ID 确定。如果 process.env.NODE_UNIQUE_ID 未定义,则 isMaster 为真。
在你的模块中,你可以检查require('cluster').isMaster
,你不应该直接检查process.env.NODE_UNIQUE_ID
,因为它总是在启动后被删除,总是未定义。 https://github.com/nodejs/node/blob/16689e30aeff03c8c47a605425727cf190c169e9/lib/internal/bootstrap_node.js#L129
【讨论】:
谢谢 :),这行得通,我可以在我的 senario 中有全局变量吗?process
是一个全局变量,你只需要深入process.env.NODE_UNIQUE_ID
以上是关于区分其他模块中的节点主集群的主要内容,如果未能解决你的问题,请参考以下文章