第 6 章 持久性消息
本章论述了持久性如何与 AMQ Broker 合作以及如何配置它。
代理随附两个持久性选项:
默认值。将消息写入文件系统中日志的高性能选项。
使用代理的 JDBC 存储将消息保留到您选择的数据库中。
另外,您还可以 为零持久性配置代理。
代理使用不同的解决方案来持久保留消息日志外的大信息。如需更多信息,请参阅使用大型消息。代理也可以配置为在内存不足的情况下将消息记录到磁盘。如需更多信息 ,请参阅 和管理消息。
有关支持哪些数据库和网络文件系统的当前信息,请参阅红帽客户门户网站中的 Red Hat AMQ 7 支持的配置。
6.1. 关于基于日志的持久性
代理的日志是仅 附加磁盘上的文件 集合。每个文件预先创建为固定的大小,最初使用 padding 填充。当消息传递操作在代理上执行时,记录会附加到日志末尾。附加记录可让代理最小化磁盘头移动和随机访问操作,这通常是磁盘上的最慢的操作。当一个日志文件已满时,代理会使用一个新的日志文件。
日志文件的大小可配置,从而最大程度减少每个文件所使用的磁盘柱面的数量。但是,现代磁盘拓扑比较复杂,代理无法控制该文件所映射到的柱面。因此,日志文件大小并非精确的科学。
其他与持久性相关的功能包括:
- 确定特定日志文件仍在使用中的复杂文件垃圾回收算法。如果没有,可以回收并重新使用该文件。
- 一个紧凑算法,它从日志中删除死空间,并压缩数据。这会导致日志使用较少的磁盘上的文件。
- 支持本地事务。
- 在使用 AMQ JMS 客户端时支持 XA 事务。
大多数日志使用 Java 编写。但是,抽象与实际文件系统的交互是抽象的,因此您可以使用不同的、可插拔式的实现。AMQ Broker 附带两个实现:
使用标准 Java NIO 与文件系统接口。这可提供极好的性能,并在带有 Java 6 或更高版本运行时的任何平台上运行。
Linux Asynchronous IO
使用精简原生打包程序与 Linux 异步 IO 库(AIO)进行通信。使用 AIO 时,代理会在数据变为磁盘后调用,避免完全进行显式同步。默认情况下,代理尝试使用 AIO 日志,并在 AIO 不可用时回退到使用 NIO。
使用 AIO 时的性能优于使用 Java NIO 时。有关如何安装 libaio 的说明,请参阅使用 AIO 日志。
有关支持哪些网络文件系统的当前信息,请参阅红帽客户门户网站中的 Red Hat AMQ 7 支持的配置。
6.1.1. 使用 AIO
Java NIO 日志非常高性能,但如果您正在运行使用 Linux 内核 2.6 或更高版本的代理,红帽建议使用 AIO 日志来提高性能。不可与其它操作系统或早期版本的 Linux 内核一起使用 AIO 日志。
要使用 AIO 日志,如果 libaio
尚未安装,则必须安装 libaio。
步骤
-
使用
yum
命令安装libaio
,如下例所示:
yum install libaio