第 8 章 处理大型消息
客户端可能会发送可能会超过代理内部缓冲区大小的大量消息,从而导致意外错误。要防止这种情况,您可以将代理配置为在消息大于指定最小值时将消息存储为文件。以这种方式处理大型消息意味着代理不会在内存中保存消息。相反,您可以在磁盘上或代理存储大型消息文件的数据库表中指定目录。
当代理将消息存储为大消息时,队列会在大型消息目录或数据库表中保留对文件的引用。
大型消息处理可用于核心协议 AMQP、OpenWire 和 STOMP 协议。
对于核心协议和 OpenWire 协议,客户端在其连接配置中指定最小大型消息大小。对于 AMQP 和 STOMP 协议,您可以在代理配置中为每个协议指定 acceptor 定义的最小大消息大小。
建议您不要使用不同的协议 来生成和使用大型消息。要做到这一点,代理可能需要执行多个消息的转换。例如,假设您要使用 AMQP 协议发送一条消息,并使用 OpenWire 接收消息。在这种情况下,代理必须首先读取大型消息的整个正文,并将其转换为使用 Core 协议。然后,代理必须执行另一个转换,这一次到 OpenWire 协议。比如这些信息转换,比如在代理中造成大量处理开销。
您为上述任何协议指定的最小大消息大小会受到系统资源(如可用磁盘空间)以及消息的大小的影响。建议您使用多个值运行性能测试来确定适当的大小。
本节中的步骤演示了如何:
- 配置代理以存储大型消息
- 为大型消息处理配置 AMQP 和 STOMP 协议的接收器
本节还链接到有关配置 AMQ Core Protocol 和 AMQ OpenWire JMS 客户端以使用大型消息的其他资源。
8.1. 为大型消息处理配置代理 复制链接链接已复制到粘贴板!
以下流程演示了如何在磁盘中指定目录或代理存储大型消息文件的数据库表。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 指定您希望代理存储大型消息文件的位置。
如果要在磁盘上存储大型消息,请在
core
元素中添加large-messages-directory
参数,并指定文件系统位置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果没有为
large-messages-directory
明确指定值,代理会使用默认值 <broker_instance_dir> /data/largemessages
如果您在数据库表中存储大型消息,请将
large-message-table
参数添加到database-store
元素中,并指定一个值。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您没有为
large-message-table
明确指定值,代理将使用默认值LARGE_MESSAGE_TABLE
。
其他资源
- 有关配置数据库存储的更多信息,请参阅 第 6.2 节 “在数据库中保留消息数据”。