我想知道RabbitMQ可以在一台服务器上处理多少个最大队列?
它取决于RAM吗?它取决于erlang进程吗?
答案 0 :(得分:42)
RabbitMQ代理中没有任何硬编码限制。代理将利用所有可用资源(除非您对其中一些资源设置限制,它们在RabbitMQ术语中称为 watermarks )。
Erlang本身存在一些限制,例如最大并发进程数,但如果理论上可以在单个节点上访问它们,那么使用distributed features总是好主意。
有很多关于RabbitMQ资源使用和限制的讨论,
P.S。但是有AMQP协议限制。它们在4.9 Limitations
部分中描述AMQP规范对未来的扩展规定了这些限制 AMQP或来自相同线路级格式的协议:
- 每个连接的通道数:16位通道号。
- 协议类数:16位类ID。
- 每个协议类的方法数:16位方法ID。
AMQP规范对数据施加了这些限制:
- 短字符串的最大大小:255个八位字节。
- 长字符串或字段表的最大大小:32位大小。
- 帧有效负载的最大大小:32位大小。
- 内容的最大大小:64位大小。
服务器或客户端也可能对资源施加自己的限制 作为同时连接的数量,每个消费者的数量 通道,队列数等。这些不会影响互操作性 并且未指定。
答案 1 :(得分:21)
这篇文章可以帮到你:
http://rabbitmq.1065348.n5.nabble.com/Max-messages-allowed-in-a-queue-in-RabbitMQ-td26063.html
修改强>
1)RabbitMQ中允许的最大队列?
成千上万(甚至数万)的队列应该没问题 完全,尽管每个对象(例如,队列,交换,绑定等) 将占用一些内存和/或磁盘空间。默认情况下,Erlang会 强制执行最大数量的并发进程(即轻量级) 在32768 IIRC附近。每个队列都由自己管理 进程和每个连接可以产生更多,所以如果你 计划在一个单独的队列中拥有大量的活动队列 节点(?)并同时使用它们,那么您可能需要 调整模拟器参数Rabbit通过将+ P设置为更高的限制来传递VM。
你也可能只用掉每个Gb的费用 排队/连接相当快,所以你需要一个非常多肉 服务器处理数百万。成千上万应该是没有 问题在于,只要它们适合RAM。
答案 2 :(得分:3)
RabbitMQ中的队列是单线程的,一个队列最多可以处理大约 50,000条消息。如果有多个,则在多核系统上可以实现更好的吞吐量 队列和多个使用者。尽可能多地获得最佳吞吐量 在核心节点上排队作为核心。
RabbitMQ管理界面收集并计算每个队列的指标 在集群中。如果成千上万个服务器,这可能会减慢服务器速度 活动队列和使用者。使用过多的队列也会对CPU和RAM的使用产生负面影响。