RabbitMQ消息的大小和类型

tuc*_*hk4 92 queue message-queue amqp rabbitmq

  1. RabbitMQ队列中可以存储哪些消息?只有字符串?或者我可以选择我想要存储的类型:int,binary,string等?
  2. 一条消息的最大大小是多少?
  3. 可以创建多少个队列或交换?或者它取决于服务器的功率?

rob*_*olf 108

  1. 从理论上讲,任何东西都可以作为消息存储/发送.实际上你不想在队列中存储任何东西.如果队列在大多数时间都是空的,则系统的工作效率最高.您可以使用两个前提条件将任何您想要的内容发送到队列:

    • 您发送的内容可以转换为字节串
    • 消费者确切知道它的内容以及如何将其转换为原始对象

    字符串非常简单,它们有一个内置的方法来转换为字节和从字节转换.如果您知道它是一个字符串,那么您就知道如何将其转换回来.最好的选择是使用XML,JSON或YML等标记字符串.这样您就可以将对象转换为字符串并再次返回原始对象; 它们可以跨编程语言工作,因此只要知道如何理解对象,您的消费者就可以用不同的语言编写给生产者.我在Java工作.我想在字段中发送带有子对象的复杂消息.我使用自己的消息对象.消息对象有两个额外的方法toBytes,fromBytes可以转换为字节流和从字节流转换.我使用路由密钥,毫不怀疑消费者正在接收什么类型的消息.消息是Serializable.这工作正常,但是限制因为我只能将它与其他Java程序一起使用.

  2. 消息的大小受服务器上的内存限制,如果它是持久的,那么也是免费的HDD空间.你可能不想发送太大的消息; 发送对文件或数据库的引用可能更好.

    您可能还想了解他们的绩效指标:http : //www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/博客/ 2012/04/25/RabbitMQ的性能的测量部分-2 /

  3. 队列非常轻,您很可能会受到连接数量的限制.它最有可能取决于服务器.以下是类似问题的一些信息:http: //lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html


Mag*_*ero 7

在3.8.0版之前,RabbitMQ中的最大邮件大小2 GiB

%% Trying to send a term across a cluster larger than 2^31 bytes will
%% cause the VM to exit with "Absurdly large distribution output data
%% buffer". So we limit the max message size to 2^31 - 10^6 bytes (1MB
%% to allow plenty of leeway for the #basic_message{} and #content{}
%% wrapping the message body).
-define(MAX_MSG_SIZE, 2147383648).
Run Code Online (Sandbox Code Playgroud)

参考:https : //github.com/rabbitmq/rabbitmq-common/blob/v3.7.21/include/rabbit.hrl#L279

从3.8.0版开始,它已达到512 MiB

%% Max message size is hard limited to 512 MiB.
%% If user configures a greater rabbit.max_message_size,
%% this value is used instead.
-define(MAX_MSG_SIZE, 536870912).
Run Code Online (Sandbox Code Playgroud)

参考:https : //github.com/rabbitmq/rabbitmq-common/blob/v3.8.0/include/rabbit.hrl#L238


Jer*_*odG 5

  1. 参见罗布狼的回答

  2. 最大消息大小为 2GB,但是,对此大小的消息进行性能调整并不有效。最大消息大小

  3. RabbitMQ 服务器软件对队列数量没有硬性限制,但是,运行服务器的硬件很可能会影响此限制。

3a. 默认情况下,服务器没有施加队列长度限制。但是,您可以通过服务器端策略(配置)或客户端策略来限制这一点。最大队列长度

相关帖子中有更多信息和链接。