我正在编写一个Node应用程序,它将根据从后端db中提取的配置生成一个JMS队列订阅数组。初始化时,我将从后端检索当前状态,但随后需要支持对Node服务器的入站API调用,以便动态添加和远程订阅(然后更新存储在后端的列表)。
在整个应用程序中,这个订阅数组必须只有一个实例,而且必须是的真实来源。
示例:
在init中,我可以从API中获得:
{
"amysCar": {
"name": "2016 Lamborghini Gallardo LP 550-2",
"queue": "/queues/amysracingstats"
},
"bobsCar": {
"name": "1967 Ford Mustang Shelby Shelby GT500",
"queue": "/queues/bobsrestorationproject"
}
}那么,假设Bob决定不再发布他的恢复项目;他将对Node服务器DELETE /projects/bobsCar进行API调用。我将从队列数组中删除队列侦听器,并更新后端db。
实际上,我需要能够从多个控制器访问JMS队列数组,因为处理API调用的控制器与处理队列订阅的控制器是分开的。
我意识到,众所周知,在Node中编写和管理单例是非常困难的,受到反对,而且据称是completely unnecessary,因为Node.js模块缓存据说只加载模块的单个实例。如果这是正确的,我可以简单地将队列订阅数组存储为模块中的私有对象,然后将其存储在require调用控制器中。
发布于 2015-09-02 18:34:13
是的,这是真的。只需使用模块属性即可。由于模块缓存,只有一个这样的属性。
我假设模块本身只是进行后端调用来初始化状态。它可以在第一次加载或通过第一个模块构造函数调用时执行。
您似乎已经了解模块缓存以及模块属性如何作为单例工作,因此如果您仍然试图避免使用该功能,那么这将是过度考虑。但是,如果你只是在确认事情在依赖它之前是如何运作的,那就没问题了。
https://stackoverflow.com/questions/32360242
复制相似问题