答案 0 :(得分:104)
理论上任何东西都可以作为信息存储/发送。实际上你不想在队列中存储任何东西。如果队列在大多数时间都是空的,则系统的工作效率最高。您可以使用两个前提条件将您想要的任何内容发送到队列:
字符串非常简单,它们有一个内置的方法来转换为字节和从字节转换。如果您知道它是一个字符串,那么您就知道如何将其转换回来。最好的选择是使用XML,JSON或YML等标记字符串。这样您就可以将对象转换为字符串并再次返回原始对象;它们可以跨编程语言工作,因此只要知道如何理解对象,您的消费者就可以用不同的语言编写给生产者。
我在Java工作。我想在字段中发送带有子对象的复杂消息。我使用自己的消息对象。消息对象有两个额外的方法toBytes
和fromBytes
,可以转换为字节流和从字节流转换。我使用路由密钥,毫不怀疑消费者正在接收什么类型的消息。消息是Serializable。这工作正常,但是限制因为我只能将它与其他Java程序一起使用。
邮件的大小受服务器内存的限制,如果它是持久的,那么也是免费的硬盘空间。你可能不想发送太大的消息;发送对文件或数据库的引用可能更好。
您可能还想了解他们的绩效指标: http://www.rabbitmq.com/blog/2012/04/17/rabbitmq-performance-measurements-part-1/ http://www.rabbitmq.com/blog/2012/04/25/rabbitmq-performance-measurements-part-2/
队列重量很轻,您很可能会受到连接数量的限制。它最有可能取决于服务器。以下是类似问题的一些信息: http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-February/003042.html
答案 1 :(得分:4)
最大邮件大小为2GB,但是,此大小的邮件的性能调整无效。 Max Message Size
RabbitMQ服务器软件对队列数量没有硬性限制,但服务器运行的硬件可能会对此限制产生很大的影响。
3A。默认情况下,服务器没有强制实施队列长度限制。但是,您可以通过服务器端策略(配置)或客户端策略来限制此操作。 Max Queue Length
related post上有更多信息和链接。
答案 2 :(得分:4)
RabbitMQ中的最大邮件大小为 2 GiB ,直到3.7版:
%% 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.13/include/rabbit.hrl#L279
现在从3.8版开始为 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/master/include/rabbit.hrl#L255