RabbitMQ - 单个服务器上能处理多少个队列?

72

RabbitMQ在单个服务器上能处理的最大队列数是多少?

这取决于RAM吗?还是取决于Erlang进程?


1
RabbitMQ服务器能处理1000万个队列吗?我的服务器需要多少内存? - Raj Sf
@N.B. - 这与硬件无关 :),它是关于处理有关RabbitMQ的请求。 - Raj Sf
4
我同意应该考虑硬件问题,但硬件工程师无法回答这个问题。这个问题需要了解rabbitMQ服务器、消息队列协议,最后但并非不重要的是rabbitMQ占用多少内存百分比(我认为这是总RAM的40%)。 - Raj Sf
2
当然,像你这样的人可以用-1奖励这篇帖子,但我不介意,理解这个问题的人肯定会回答 :) - Raj Sf
2个回答

61

RabbitMQ代理程序内没有硬编码限制。代理将利用所有可用资源(除非您在其中某些资源上设置了限制,这些在RabbitMQ术语中被称为水印)。

Erlang本身有一些限制,例如最大并发进程数,但是如果您在单个节点上可以理论上达到它们,则始终建议使用分布式功能

关于RabbitMQ资源使用和限制有很多讨论,

P.S. 但是AMQP协议有限制。它们在4.9 限制部分进行了描述。

AMQP规范对来自相同的线路级格式的AMQP或协议的未来扩展强加这些限制:

  • 每个连接的通道数:16位通道号。
  • 协议类的数量:16位类ID。
  • 每个协议类的方法数:16位方法ID。

AMQP规范对数据施加了以下限制:

  • 短字符串的最大长度:255个八位字节。
  • 长字符串或字段表的最大长度:32位大小。
  • 帧有效载荷的最大大小:32位大小。
  • 内容的最大大小:64位大小。

服务器或客户端也可以对诸如同时连接数、每个通道的消费者数、队列数等资源施加自己的限制。这些不影响互操作性,也没有规定。


36

本文旨在帮助您:

http://rabbitmq.1065348.n5.nabble.com/Max-messages-allowed-in-a-queue-in-RabbitMQ-tp26063p26066.html

  1. RabbitMQ允许的最大队列数是多少?

成千上万(甚至数万)个队列完全没有问题,但是每个对象(例如队列、交换机、绑定等)都会占用一些内存和/或磁盘空间。默认情况下,Erlang将强制实施一些限制,例如最大并发进程数约为32768。每个队列由它自己的进程来管理,每个连接可能会产生更多的进程,因此如果您计划在单个节点中拥有非常大量的活动队列,并且同时使用它们,则可能需要通过设置+P <new limit> 的仿真器参数来将rabbit传递给VM以获取更高的限制。

您还可能很快就会使用掉许多GB,只是用于每个队列/连接的开销,因此您需要一个相当强大的服务器来处理数百万个以上的队列/连接。提供它们适合内存的话,成千上万个队列完全没有问题。


1
不错的帖子。基本上我想要技术性的答案,例如1GB RAM可以处理这么多请求...就像这样 - 这样我就可以决定是否应该增加RAM。 - Raj Sf
5
根据帖子的内容可知,如果您计划在单个节点中拥有大量活跃队列并同时使用它们,那么您可能需要通过设置+P <新限制>来调整Rabbit传递给虚拟机的仿真器参数,以提高限制。因此,您需要创建一个真实的模拟来确定具体的数字,因为这取决于活动和连接情况。 - Gabriele Santomaggio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接