RabbitMQ - RabbitMQ 可以在单个服务器上处理多少个队列?
Posted
技术标签:
【中文标题】RabbitMQ - RabbitMQ 可以在单个服务器上处理多少个队列?【英文标题】:RabbitMQ - How many queues can RabbitMQ handle on a single server? 【发布时间】:2014-05-24 06:22:36 【问题描述】:RabbitMQ 在单台服务器上最多可以处理多少个队列?
它是否依赖于 RAM?是否依赖于 erlang 进程?
【问题讨论】:
RabbitMQ Server 能处理1000万个队列吗?我的服务器需要多少内存? @N.B. - 不,它与硬件无关:),它是关于处理关于 RabbitMQ 的请求 我同意我应该考虑硬件,但硬件工程师无法回答这个问题:) ..这个问题需要了解 rabbitMQ 服务器、消息队列协议以及最后但并非最不重要的内存百分比rabbitMQ 占用(我认为它占总 RAM 的 40%) 当然,像你这样的人可以给这篇文章-1,但我不是我的,明白这个问题的人肯定会回答:) 【参考方案1】:这篇文章可以帮助你:
http://rabbitmq.1065348.n5.nabble.com/Max-messages-allowed-in-a-queue-in-RabbitMQ-tp26063p26066.html
RabbitMQ 中允许的最大队列数?
几千(甚至几万)个队列应该没问题 完全没有,尽管每个对象(例如,队列、交换、绑定等) 会占用一些内存和/或磁盘空间。默认情况下,Erlang 将 强制执行最大数量的并发进程(即轻量级 线程)在 32768 IIRC 左右。每个队列都由自己管理 过程和每个连接都可能导致更多,所以如果你 计划在单个中拥有大量活动队列 节点(?)并同时使用它们,那么您可能需要 调整模拟器参数 rabbit 通过设置 +P
到更高的限制。 您也可能会用掉很多 Gb,只是每个 Gb 的开销 队列/连接非常快,所以你需要一个非常多肉的 服务器来处理数以百万计的两者。几万应该没有 完全没有问题,只要它们适合 RAM。
【讨论】:
好帖子。基本上我想要Ex的技术答案。 1Gb RAM 可以处理这么多的请求 ..like this - 这样我就可以决定是否应该增加 RAM 正如您在帖子中看到的:“因此,如果您计划在单个节点 (?) 中拥有大量活动队列并同时使用它们,那么您可能需要调整模拟器参数 rabbit 通过将 +PRabbitMQ 代理内部没有任何硬编码限制。代理将利用所有可用资源(除非您对其中一些资源设置限制,否则它们在 RabbitMQ 术语中称为 水印)。
Erlang 本身有一些限制,比如最大并发进程数,但如果理论上你可以在单个节点上达到它们,那么使用distributed features 总是个好主意。
关于RabbitMQ资源使用和限制的讨论很多,
How many queues can one broker support 在 RabbitMQ 邮件列表中 Max messages allowed in a queue in RabbitMQ? 在 RabbitMQ 邮件列表中 Rabbitmq - Reasonable performance/scale expectations服务器故障 Is there a limit to the number of exchanges for rabbitmq? 堆栈溢出附:虽然有 AMQP 协议限制。它们在4.9 Limitations 部分中进行了描述
AMQP 规范对未来的扩展施加了这些限制 AMQP 或相同线级格式的协议:
每个连接的通道数:16 位通道数。 协议类数:16 位类 ID。 每个协议类的方法数:16 位方法 ID。AMQP 规范对数据施加了这些限制:
短字符串的最大长度:255 个八位字节。 长字符串或字段表的最大大小:32 位大小。 帧有效负载的最大大小:32 位大小。 内容的最大大小:64 位大小。服务器或客户端也可以对资源施加自己的限制,例如 作为同时连接的数量,每个消费者的数量 通道、队列数量等。这些不影响互操作性 并且没有指定。
【讨论】:
以上是关于RabbitMQ - RabbitMQ 可以在单个服务器上处理多少个队列?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过相关 ID 将 RabbitMq 消息聚合为单个消息