gpt4 book ai didi

node.js - RabbitMQ 和 Node JS : Following '1 connection per app, 1 channel per thread, 1 consumer per channel' guideline

转载 作者:搜寻专家 更新时间:2023-11-01 00:16:59 24 4
gpt4 key购买 nike

我正在使用 NodeJS 和 amqplib构建一个简单的作业队列库(有点类似于 Jackrabbit) 用于服务,该服务应该解析包含有关许多不同事件的信息的相当大的提要。

信息被解析后,它被分发到数千个队列(队列是必须遵守消息顺序的最小单位),然后被我的队列库使用。

问题是:在这种情况下,我如何遵循“每个应用 1 个连接,每个线程 1 个 channel ,每个 channel 1 个消费者”的准则?这会导致产生数千个进程,从而浪费大量内存和资源。

注意:每个队列中的消息数量不是很高:最多大约 1-2 msg/sec

最佳答案

我假设你知道 NodeJS 在运行你的代码时是单线程的,这就是你的问题的来源......

在基于线程的语言中,“每个线程 1 个 channel ”规则很重要,因为语言会阻塞 channel /消费者所在的线程。您将进行某种类型的 consume 调用,线程将阻塞,等待消息出现。

这就是为什么在支持线程的语言中每个 channel 需要 1 个线程。

不过,在 NodeJS 中,订阅者消费消息的调用是非阻塞的。

这意味着您可以安全地抛弃每个线程 1 个 channel 的概念。

我自己的 NodeJS 和 RabbitMQ 代码通常会在我的应用程序的单个实例中打开数百个 channel 。

channel 便宜且易于开通。设置消息生产者或消费者的成本也很低。实际成本是 1) 连接,以及 2) 在收到消息后进行实际工作。

这归结为扩大您的消费者。在查看 NodeJS 和 RabbitMQ 时,您需要监控消息吞吐量以确定何时生成应用程序的新实例。如果您有一个持续增长的队列并且它从不耗尽(处理了所有消息),那么您需要生成一个新的消费者实例。


一些额外的注意事项:

我强烈推荐使用 https://github.com/arobson/rabbot满足您的 NodeJS/RabbitMQ 需求。我使用过许多用于 RabbitMQ 的“简单”NodeJS 库,它们都有我认为 Not Acceptable 限制。 Rabbot 有一个更好的抽象层,使使用 RabbitMQ 更容易,同时仍然为您提供所需的所有灵 active 。

您可能还想在此处查看我的 RabbitMQ 和 NodeJS 类(class):https://sub.watchmecode.net/guides/microservices-with-rabbitmq/ - 截屏视频、电子书和行业专家访谈,帮助您快速掌握 RabbitMQ 和 NodeJS。但请注意:screecasts 使用 Wascally 作为主要库 - 它是 Rabbot 的前身(当他们对它的内部结构进行一些重大更改时,它被重命名为 Rabbot)。

关于node.js - RabbitMQ 和 Node JS : Following '1 connection per app, 1 channel per thread, 1 consumer per channel' guideline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40909740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com