如何在ActiveMQ Artemis中限制大消息存储?
ActiveMQ Artemis大消息限制方案
可用的地址级限制参数
ActiveMQ Artemis 提供了两个核心参数来管控大消息的存储占用,完全满足你"仅影响对应租户"的隔离需求:
max-size-bytes:该参数统计地址的总持久化占用(包含分页消息、大消息、绑定数据及日志,即你提到的"Persistent Size")。当地址的总占用达到设定值时,会触发page-full-policy的行为(比如你配置的FAIL),直接阻止该地址的生产者发送消息,不会影响其他租户。max-large-message-size:单独限制单条大消息的大小,超过此阈值的大消息会被Broker直接拒绝,从源头避免超大消息占用存储。
配置示例
在broker.xml的address-settings节点中,针对目标租户的地址添加配置:
<address-settings> <address-setting match="tenant-specific-address"> <!-- 限制地址总持久化大小(含大消息) --> <max-size-bytes>10737418240</max-size-bytes> <!-- 10GB --> <!-- 限制单条大消息最大尺寸 --> <max-large-message-size>1073741824</max-large-message-size> <!-- 1GB --> <!-- 超限后拒绝生产者发送 --> <page-full-policy>FAIL</page-full-policy> <!-- 保留原有普通消息分页限制(可选) --> <page-limit-bytes>5368709120</page-limit-bytes> <!-- 5GB --> </address-setting> </address-settings>
关键说明
max-size-bytes会将large-messages目录的占用纳入统计,解决了你之前无法追踪大消息存储的问题。- 该配置是地址级别的,仅作用于匹配的地址,实现租户资源隔离,不会像全局
max-disk-usage那样影响所有用户。 max-size-bytes优先级高于page-limit-bytes,当总占用达到阈值时,无论分页限制是否触发,都会执行设定的超限策略。
内容的提问来源于stack exchange,提问作者Priyabrat
相关产品推荐
相关产品推荐

