20.5.4. 分页模式

当递送到某个地址的消息超过了指定的大小,该地址将进入分页模式(page/paging mode)。

注意

分页是针对单个地址的。如果您为某个地址配置了 max-size-bytes,就表示每个匹配的地址将有这个最大尺寸的限制。然而,这并不意味着所有匹配的地址的总共大小被限制为 max-size-bytes
您可以在服务器配置文件(standalone.xmldomain.xml)里为某个地址配置最大字节数(max-size-bytes)。
<address-settings>
   <address-setting match="jms.someaddress">
      <max-size-bytes>104857600</max-size-bytes>
      <page-size-bytes>10485760</page-size-bytes>
      <address-full-policy>PAGE</address-full-policy>
   </address-setting>
</address-settings>

下表描述了地址设置的参数:

表 20.4. 分页地址设置

元素 默认值 描述
max-size-bytes 10485760
它用来指定进入分页模式前这个地址可以容纳的最大内存大小。
page-size-bytes 2097152
它用来指定分页系统上每个分页文件的大小。
address-full-policy PAGE
这个属性的值用于分页决策。您可以设置为这些值:PAGE:启用分页且将超过限额的消息转储在磁盘里,DROP:丢弃超过限制的消息,FAIL:丢弃消息并发送异常到客户消息生产者,BLOCK:当发送的消息超过限额时阻塞客户消息生产者。
page-max-cache-size 5
系统将保持内存里的分页文件为 page-max-cache-size 以优化分页导航过程中的输入/输出。

重要

如果当到达最大大小时您不想将消息分页,您可以选择设置某个地址的 address-full-policyDROPFAILBLOCK 分别来简单地丢弃消息、丢弃消息并在客户端抛出异常、或者阻止生产者发送更多的消息。在默认配置里,所有的地址都在达到 max-size-bytes 后开始对消息分页。
具有多个队列的地址

当消息被路由至某个绑定多个队列的地址时,这个消息在内存里只有一个备份。每个队列都只处理原始消息备份的引用。因此,只有当引用原始消息的所有队列已经递送消息后,内存才会被释放。

注意

单个的 lazy 队列/订阅可能降低整个地址的输入/输出性能,这是因为所有的队列都将消息通过分页系统上的额外存储进行发送。