独立的网络和工作进程,是否应该为它们各自打开一个新连接?
Separate web and worker processes, should a new connection be opened for each of them?
我目前正在尝试构建一个具有网络和工作进程的 NodeJS 网络应用程序,并使用 AMQP 在它们之间进行通信。使用我当前的设置,启动应用程序涉及启动 Web 进程脚本 (server.js
) 和工作进程脚本 (worker.js
)。他们每个人 include
第三个文件,amqp.js
使用启动函数,涉及创建连接,然后创建通道,然后断言队列。
然而,在尝试调试另一个问题时,我遇到了 this article,它似乎显示了不同的结构:首先创建一个连接,然后启动两个进程,每个进程都创建一个通道连接并断言两个队列。
我是否应该为每个工作人员创建一个新连接,我是否可以在 Web 和工作人员分开且无法以其他方式通信的环境中实现这一点?
RabbitMQ 连接被认为是长期连接。如果您的客户共享内存,他们应该共享一个连接。这只是一般性建议。如果您说您的应用程序有 10 个连接,我不知道有什么缺点。如果您有数千个连接,它可能会影响性能并使监控变得更加困难。
直接回答你的问题:
如果您的 worker
是独立的并且不与任何东西共享内存,您别无选择,只能为其创建新的 RabbitMQ 连接。否则重用连接。
我目前正在尝试构建一个具有网络和工作进程的 NodeJS 网络应用程序,并使用 AMQP 在它们之间进行通信。使用我当前的设置,启动应用程序涉及启动 Web 进程脚本 (server.js
) 和工作进程脚本 (worker.js
)。他们每个人 include
第三个文件,amqp.js
使用启动函数,涉及创建连接,然后创建通道,然后断言队列。
然而,在尝试调试另一个问题时,我遇到了 this article,它似乎显示了不同的结构:首先创建一个连接,然后启动两个进程,每个进程都创建一个通道连接并断言两个队列。
我是否应该为每个工作人员创建一个新连接,我是否可以在 Web 和工作人员分开且无法以其他方式通信的环境中实现这一点?
RabbitMQ 连接被认为是长期连接。如果您的客户共享内存,他们应该共享一个连接。这只是一般性建议。如果您说您的应用程序有 10 个连接,我不知道有什么缺点。如果您有数千个连接,它可能会影响性能并使监控变得更加困难。
直接回答你的问题:
如果您的 worker
是独立的并且不与任何东西共享内存,您别无选择,只能为其创建新的 RabbitMQ 连接。否则重用连接。