11.4. 配置分页模式
当发送到地址的消息超过配置的大小时,该地址将进入分页模式。
分页为每个地址单独执行。如果您为一个地址配置 max-size-bytes,这意味着每个匹配地址将具有您指定的最大大小。但并不意味着所有匹配地址的总大小都仅限于 max-size-bytes。
即使使用 页面 模式,服务器也可能会因为内存不足而崩溃。JBoss EAP 消息传递保留对磁盘上每个页面文件的引用。在有数百万页面文件的情况下,JBoss EAP 消息传递可能会面临内存耗尽的情况。要最小化此风险,务必要将属性 page-size-bytes 设置为适当的值。您必须将 JBoss EAP 消息传递服务器的内存配置为目标数量为 max-size-bytes 的两倍,否则可能会出现内存不足错误。
您可以使用以下管理 CLI 命令,为地址读取当前的最大字节大小(最大字节数):
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:read-attribute(name=max-size-bytes)
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:read-attribute(name=max-size-bytes)
您可以使用以下管理 CLI 命令,为地址配置最大字节大小(最大字节数)。
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:write-attribute(name=max-size-bytes,value=MAX_SIZE)
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:write-attribute(name=max-size-bytes,value=MAX_SIZE)
在读取或写入地址设置的其他分页相关属性的值时,请使用类似语法。下表列出了各个属性,以及描述和默认值。
下表描述了地址设置中的参数:
| 元素 | 描述 |
|---|---|
| address-full-policy | 此属性值用于分页决策。有效值如下所列。
默认值为 |
| max-size-bytes |
这用于指定在进入分页模式前地址可以具有的最大内存大小。默认值为 |
| page-max-cache-size |
系统会将页面文件保持在内存中最多 |
| page-size-bytes |
这用于指定分页系统中使用的每个页面文件的大小。默认值为 |
默认情况下,所有地址都在地址到达 max-size-bytes 后配置为页面消息。如果您不想在达到最大大小时换页消息,您可以配置地址来丢弃消息,丢弃消息(客户端一侧除外)或阻止生产者通过分别将 address-full-policy 设置为 DROP、FAIL 和 BLOCK 来发送其他消息。
请注意,如果在任何目的地启动到页面消息后,将 address-full-policy 从 PAGE 更改为 BLOCK,则使用者将不再能够使用分页消息。
使用多个队列的地址
当消息路由到绑定有多个队列的地址时,内存中仅有一个消息副本。每个队列仅处理对该消息的原始副本的引用,因此仅当引用原始消息的所有队列都发送消息时,内存才会被释放。
单个 lazy 队列/订阅可以降低整个地址的输入/输出性能,因为所有队列都将通过分页系统上的额外存储发送消息。