RabbitMQ消息的大小和类型


97
  1. RabbitMQ队列中可以存储哪些消息?只有琴弦?还是可以选择要存储的类型:整数,二进制,字符串等?
  2. 一封邮件的最大大小是多少?
  3. 可以创建多少个队列或交换?还是取决于服务器的电源?

Answers:


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

    • 您要发送的内容可以与字节串相互转换
    • 消费者确切知道它得到了什么以及如何将其转换为原始对象

    字符串非常简单,它们具有一个内置的方法来与字节进行相互转换。如果您知道它是一个字符串,那么您就会知道如何将其转换回来。最好的选择是使用标记字符串,例如XML,JSON或YML。这样,您可以将对象转换为字符串,然后再次返回到原​​始对象。它们可以跨编程语言工作,因此只要知道如何理解对象,就可以使用与生产者不同的语言来编写您的消费者。我用Java工作。我想发送带有子对象的复杂消息。我使用自己的消息对象。消息对象有两个附加方法toBytesfromBytes在字节流之间来回转换。我使用的路由密钥毫无疑问地表明消费者正在接收哪种消息。该消息是可序列化的。这可以正常工作,但是有一定局限性,因为我只能将其与其他Java程序一起使用。

  2. 消息的大小受服务器上内存的限制,如果消息是持久的,那么空闲的HDD空间也将受到限制。您可能不想发送太大的消息。最好发送对文件或数据库的引用。

    您可能还需要阅读他们的绩效指标:http : //www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/博客/ 2012/04/25 / rabbitmq-performance-measurements-part-2 /

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


9

在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).

参考: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).

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


4
  1. 请参阅robthewolf的答案

  2. 最大消息大小为2GB,但是,此大小的消息的性能调整无效。邮件大小上限

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.