RabbitMQ在单个服务器上能处理的最大队列数是多少?
这取决于RAM吗?还是取决于Erlang进程?
RabbitMQ在单个服务器上能处理的最大队列数是多少?
这取决于RAM吗?还是取决于Erlang进程?
RabbitMQ代理程序内没有硬编码限制。代理将利用所有可用资源(除非您在其中某些资源上设置了限制,这些在RabbitMQ术语中被称为水印)。
Erlang本身有一些限制,例如最大并发进程数,但是如果您在单个节点上可以理论上达到它们,则始终建议使用分布式功能。
关于RabbitMQ资源使用和限制有很多讨论,
P.S. 但是AMQP协议有限制。它们在4.9 限制部分进行了描述。
AMQP规范对来自相同的线路级格式的AMQP或协议的未来扩展强加这些限制:
- 每个连接的通道数:16位通道号。
- 协议类的数量:16位类ID。
- 每个协议类的方法数:16位方法ID。
AMQP规范对数据施加了以下限制:
- 短字符串的最大长度:255个八位字节。
- 长字符串或字段表的最大长度:32位大小。
- 帧有效载荷的最大大小:32位大小。
- 内容的最大大小:64位大小。
服务器或客户端也可以对诸如同时连接数、每个通道的消费者数、队列数等资源施加自己的限制。这些不影响互操作性,也没有规定。
本文旨在帮助您:
http://rabbitmq.1065348.n5.nabble.com/Max-messages-allowed-in-a-queue-in-RabbitMQ-tp26063p26066.html
- RabbitMQ允许的最大队列数是多少?
成千上万(甚至数万)个队列完全没有问题,但是每个对象(例如队列、交换机、绑定等)都会占用一些内存和/或磁盘空间。默认情况下,Erlang将强制实施一些限制,例如最大并发进程数约为32768。每个队列由它自己的进程来管理,每个连接可能会产生更多的进程,因此如果您计划在单个节点中拥有非常大量的活动队列,并且同时使用它们,则可能需要通过设置+P <new limit> 的仿真器参数来将rabbit传递给VM以获取更高的限制。
您还可能很快就会使用掉许多GB,只是用于每个队列/连接的开销,因此您需要一个相当强大的服务器来处理数百万个以上的队列/连接。提供它们适合内存的话,成千上万个队列完全没有问题。