- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 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/
我正在尝试创建一个类似 Twitter 的关注/关注系统。表格设计是这样的 - leader_id | following_id | is_mutual 1 |
尊敬的数据库专家/程序员: 我有一个mysql表,里面有用户信息,比如 id user_id name etc. 1 userA 2
我正在尝试设置我的 User GraphQL 模型以具有要查询的 followers 和 following 属性。但是,我无法在 Sequelize 中建立关系。我正在尝试使用 Follower 模
在我的网站上,我有一个类似 twitter 的概念,我有一个具有以下结构的用户连接表, ============================================= ==========
下面列出的区别是什么: 最佳答案 首先,你知道Meta Robots Tags吗?Meta Robots Tags 是告诉蜘蛛或爬虫要抓取或索引哪些页面。 跟随意味着:页面将被抓取。 No
我正在做一些项目,我在考虑关注者和像推特这样的关注系统。我在数据库中有成员表。我怎样才能做关注者系统。逻辑是什么?我做了类似的事情:我创建了名称跟随的新表,我有 3 行。这些行是 id、user_id
这是用于 C 代码检测。我正在尝试标记没有中断的 case 语句。当 break 语句之前有多行时,树的层次结构如下所示。这是 C 中的示例: switch (x) { case 1: i
大家好,我正在使用 MySQL 和 PHP 制作关注者/被关注系统,所以我想获取我关注的用户的所有视频并按 ID 描述排序。 数据库架构: 例如,如果我的 user_id = 1,并且如果我正在关注
我正在尝试根据#following #followers 找到一个计算推特用户“重要性”的方程式 我要考虑的事情: 1. #followers/#following越多,他越重要。 2. 在 20/2
这是我得到的错误 undefined method `followed_users?' for # 提取的源代码(大约第 3 行): 1: 2: 3: 4: 5: 6:
我有一个用户模型,可以创建关系以拥有关注者并关注其他人,我从 Rails 教程中学到的一切都非常有效。一件事是,我正在尝试通过添加能够看到其他人的关注者并能够拥有关注/关注按钮选项的选项来将其推进到下
我正在尝试通过 Twitter Javascript Api(请参阅 here )检查登录用户是否在 Twitter 上关注我。如果没有,我将显示一个关注按钮。现在我似乎无法找出命令 isFollow
我希望能够使用 iOS 5 的 Twitter API 将所有用户关注者和关注者用户名放入 NSDictionary... 不过我遇到了障碍。我不知道如何使用 Twitter API 来执行此操作..
希望在域之后但在其他任何内容之前获取值。 因此 URL 的示例是: www.domain.com/following#2 我只想从该 url 中获取后面的单词。 目前有这个可以重定向用户并在任何片段等
我有下表: 关系 id、follower_id、followee_id、状态 用户 id、姓名、电子邮件 我想查找正在关注或被特定用户关注的所有用户。 这是我到目前为止所拥有的,但速度非常慢: SEL
我是 state Management 的新手,正在使用 provider package 。产生这些类型的异常有多少种不同的原因,我该如何解决,此异常是在 didChangeDependencies
所以我在这里尝试制作一个类似 Instagram 的应用程序,但仅适用于汽车,我尝试单击“关注”和“关注者”来查看我关注的人和关注我的人,但我不确定为什么会有NPE吗... 我成功地可以关注用户,用户
我是 state Management 的新手,正在使用 provider package 。产生这些类型的异常有多少种不同的原因,我该如何解决,此异常是在 didChangeDependencies
我讨厌发布“这应该很容易,我错过了什么”问题,但是......这应该很容易,我错过了什么?我在这个测试代码上没有得到匹配,我不明白为什么。模式是(或应该是)“任何三个数字,后跟任何三个相同的数字,后跟
我正在研究 Chapter 11在 Hartl 的教程中,试图让用户 Controller 中的未登录用户访问关注者和关注页面通过。我遇到了一个错误,Rails 会提示未定义的 admin? 方法,尽
我是一名优秀的程序员,十分优秀!