4.8. 为 AMQP 消息配置大型消息处理

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

对于 OpenShift Container Platform 上的代理部署,大型信息目录为 /opt/<custom_resource_name>/data/large-messages on the Persistent Volume(PV)。当代理将消息存储为大消息时,队列会在大型消息目录中保留对 文件的引用。

重要

对于 AMQ Broker 7.9 中基于 Operator 的代理部署,大型消息处理仅适用于 AMQP 协议。

4.8.1. 为大型消息处理配置 AMQP 接收器

以下流程演示了如何配置接收器来处理大于指定大小的 AMQP 消息作为大型消息。

先决条件

流程

  1. 打开您之前定义了 AMQP 接收器的自定义资源(CR)实例。

    1. 使用 OpenShift 命令行界面:

      $ oc edit -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 在左侧导航菜单中点击 AdministrationCustom Resource Definitions
      2. 单击 ActiveMQArtemis CRD。
      3. 实例 选项卡。
      4. 查找与项目命名空间对应的 CR 实例。

    之前配置的 AMQP 接收器可能类似如下:

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp
        port: 5672
        connectionsAllowed: 5
        expose: true
        sslEnabled: true
    ...
  2. 指定代理作为大型消息处理的 AMQP 消息的最小大小,以字节为单位。例如:

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp
        port: 5672
        connectionsAllowed: 5
        expose: true
        sslEnabled: true
        amqpMinLargeMessageSize: 204800
        ...
    ...

    在前面的示例中,代理配置为接受端口 5672 上的 AMQP 消息。根据 amqpMinLargeMessageSize 的值,如果接收器收到 AMQP 消息,其正文大于或等于 204800 字节(即 200 KB),代理会将消息存储为大消息。

    代理将消息存储在大型信息目录中(默认为/opt/<custom_resource_name> /data/large-messages )中。

    如果您没有为 amqpMinLargeMessageSize 属性明确指定值,代理将使用默认值 102400(即 100 KB)。

    如果您将 amqpMinLargeMessageSize 设置为 -1,则禁用 AMQP 消息的大型消息处理。