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 消息作为大型消息。
先决条件
- 您应该熟悉如何为基于 Operator 的代理部署配置接收器。请参阅 第 4.7.1 节 “配置接收器”。
要在专用的大型消息目录中存储大型 AMQP 消息,代理部署必须使用持久性存储(即,用于创建部署的自定义资源(CR)实例中
persistenceEnabled
设置为true
)。有关配置持久性存储的更多信息,请参阅:
流程
打开您之前定义了 AMQP 接收器的自定义资源(CR)实例。
使用 OpenShift 命令行界面:
$ oc edit -f <path/to/custom_resource_instance>.yaml
使用 OpenShift Container Platform Web 控制台:
-
在左侧导航菜单中点击
-
单击
ActiveMQArtemis
CRD。 -
点
实例
选项卡。 - 查找与项目命名空间对应的 CR 实例。
-
在左侧导航菜单中点击
之前配置的 AMQP 接收器可能类似如下:
spec: ... acceptors: - name: my-acceptor protocols: amqp port: 5672 connectionsAllowed: 5 expose: true sslEnabled: true ...
指定代理作为大型消息处理的 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 消息的大型消息处理。