- 允许的消息类型是什么(字符串、字节、整数等)?
- 消息的最大大小是多少?
- 队列和交换的最大数量是多少?
3 回答
理论上任何东西都可以作为消息存储/发送。您实际上不想在队列中存储任何内容。如果队列大部分时间都是空的,则系统工作效率最高。您可以在两个前提条件下将任何您想要的内容发送到队列:
- 您发送的内容可以转换为字节串
- 消费者确切地知道它得到了什么以及如何将其转换为原始对象
字符串非常简单,它们有一个内置的方法来转换字节和从字节转换。如果您知道它是一个字符串,那么您就知道如何将其转换回来。最好的选择是使用 XML、JSON 或 YML 等标记字符串。通过这种方式,您可以将对象转换为字符串,然后再转换回原始对象;它们可以跨编程语言工作,因此您的消费者可以用与您的生产者不同的语言编写,只要它知道如何理解对象。我在 Java 中工作。我想在字段中发送带有子对象的复杂消息。我使用自己的消息对象。消息对象有两个额外的方法
toBytes
和fromBytes
与字节流相互转换。我使用的路由键可以毫无疑问地确定消费者正在接收什么类型的消息。该消息是可序列化的。这很好用,但有限制,因为我只能将它与其他 Java 程序一起使用。消息的大小受服务器内存的限制,如果它是持久的,那么可用的 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/
队列的重量很轻,您很可能会受到您拥有的连接数量的限制。这很可能取决于服务器。以下是有关类似问题的一些信息:http: //lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html
消息的最大大小是多少?
在 3.8.0 版之前它曾经是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
请参阅robthewolf 的回答。
最大消息大小为 2GB,但是,此大小的消息的性能调整无效。最大消息大小
RabbitMQ 服务器软件对队列数量没有硬性限制,但是,服务器运行的硬件可能会影响这个限制。
3a。默认情况下,服务器没有强加队列长度限制。但是,您可以通过服务器端策略(配置)或客户端策略来限制这一点。最大队列长度
相关帖子上有更多信息和链接。