RabbitMQ - RabbitMQ可以在一台服务器上处理多少个队列?

时间:2014-04-10 13:43:31

标签: rabbitmq message-queue amqp

我想知道RabbitMQ可以在一台服务器上处理多少个最大队列?

它取决于RAM吗?它取决于erlang进程吗?

3 个答案:

答案 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的使用产生负面影响。