第 8 章 处理大型消息


客户端可能会发送可能会超过代理内部缓冲区大小的大型消息,从而导致意外错误。要防止这种情况,您可以将代理配置为当消息大于指定最小值时将消息存储为文件。以这种方式处理大型消息意味着代理不会在内存中保存消息。相反,您可以在磁盘上指定目录,或者在代理存储大型消息文件的数据库表中。

当代理将消息存储为大消息时,队列会在大型消息目录或数据库表中保留对文件的引用。

大型消息处理可用于核心协议、AMQP、OpenWire 和 STOMP 协议。

对于核心协议和 OpenWire 协议,客户端在其连接配置中指定最小大消息大小。对于 AMQP 和 STOMP 协议,您可以在代理配置中为每个协议定义的接受者中指定最小大消息大小。

注意

建议您不要使用不同的协议 来生成和使用大消息。要做到这一点,代理可能需要执行一些消息的转换。例如,假设您想使用 AMQP 协议发送消息,并使用 OpenWire 接收消息。在这种情况下,代理必须首先读取大型消息的完整正文,并将其转换为使用 Core 协议。然后,代理必须执行另一个转换,这一次到 OpenWire 协议。比如这些信息转换,比如在代理中造成大量处理开销。

您为上述任何协议指定的最小大消息大小会受到系统资源(如可用的磁盘空间量以及消息大小)的影响。建议您使用几个值运行性能测试来确定适当的大小。

本节中的步骤演示了如何:

  • 配置代理以存储大型消息
  • 为 AMQP 和 STOMP 协议配置用于大型消息处理的接收器

本节还链接到有关配置 AMQ Core Protocol 和 AMQ OpenWire JMS 客户端以处理大量消息的其他资源。

8.1. 为大型消息处理配置代理

以下流程演示了如何在磁盘上指定目录,或者代理在其中存储大型消息文件的数据库表。

流程

  1. 打开 & lt;broker_instance_dir> /etc/broker.xml 配置文件。
  2. 指定希望代理存储大型消息文件的位置。

    1. 如果您在磁盘上存储大量消息,请在 core 元素中添加 large-messages-directory 参数并指定文件系统位置。例如:

      <configuration>
        <core>
          ...
          <large-messages-directory>/path/to/my-large-messages-directory</large-messages-directory>
          ...
        </core>
      </configuration>
      注意

      如果您没有为 large-messages-directory 明确指定值,代理将使用默认值 < broker_instance_dir> /data/largemessages

    2. 如果您在数据库表中存储大型消息,请将 large-message-table 参数添加到 database-store 元素中,并指定一个值。例如:

      <store>
        <database-store>
          ...
          <large-message-table>MY_TABLE</large-message-table>
          ...
        </database-store>
      </store>
      注意

      如果没有为 large-message-table 显式指定值,代理将使用默认值 LARGE_MESSAGE_TABLE

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.