4.5. 配置消息持久性


默认情况下,AMQ Broker 不会持久保留(即存储)消息数据。AMQ Broker 有两个选项用于持久性消息数据:

  • 在日志中保留消息.如果您启用持久性,这是保留消息的默认方法。基于日志的持久性是一种高性能选项,可将消息写入到文件系统中的日志中。
  • 持久保留数据库中的消息.此选项使用 Java 数据库连接(JDBC)连接,将消息持久化到您选择的数据库。
注意

有关 AMQ Broker 支持哪些数据库和网络文件系统的当前信息,请参阅红帽客户门户网站中的 Red Hat AMQ 7 支持的配置

4.5.1. 配置基于日志的持久性

当您启用持久性时,消息默认保留在日志文件中。

流程

  1. 编辑用于代理部署的 ActiveMQArtemis 自定义资源(CR)。
  2. persistenceEnabled 属性设置为 true。例如:

    spec:
      ...
      deploymentPlan:
        persistenceEnabled: true
      ...
    Copy to Clipboard Toggle word wrap
  3. 保存 CR。

4.5.2. 配置数据库持久性

您可以使用 Java 数据库连接(JDBC)连接将 AMQ Broker 配置为持久保留数据库中的消息。

当您将消息数据存储在数据库中时,代理使用 Java 数据库连接(JDBC)连接将消息和绑定数据存储在数据库表中。表中的数据使用 AMQ Broker 日志编码进行编码。有关支持的数据库的详情,请参考红帽客户门户网站中的 Red Hat AMQ 7 支持的配置

重要

管理员可能会选择根据组织更广泛的 IT 基础架构要求将消息数据存储在数据库中。但是,使用数据库可能会对消息传递系统的性能造成负面影响。具体来说,通过 JDBC 将消息传递数据写入数据库表可为代理造成显著的性能开销。

前提条件

  • 用于 AMQ Broker 的专用数据库。
  • 代理在运行时为代理提供所需的 JDBC 驱动程序 JAR 文件。有关如何在运行时将 JAR 文件提供给代理的详情,请参考 第 4.4 节 “添加第三方 JAR 文件”
  • 部署只有一个代理实例。为确保部署具有单一代理实例,请确保 deployment.size 属性不在 ActiveMQArtemis 自定义资源(CR)中。当 CR 中省略 deployment.size 属性时,会部署单个代理实例。

流程

  1. 编辑用于代理部署的 ActiveMQArtemis 自定义资源(CR)。
  2. 使用 brokerProperties 属性启用 JDBC 数据库持久性。例如:

    spec:
      ...
      brokerProperties:
      - storeConfiguration=DATABASE
      - storeConfiguration.jdbcDriverClassName=<class name>
      - storeConfiguration.jdbcConnectionUrl=jdbc:<URL>
      - HAPolicyConfiguration=SHARED_STORE_PRIMARY
      ...
    Copy to Clipboard Toggle word wrap
    storeConfiguration
    指定 DATABASE 值,以将消息持久化到 JDBC 数据库。
    storeConfiguration.jdbcDriverClassName

    JDBC 数据库驱动程序的完全限定域名。例如,org.postgresql.Driver

    有关支持的数据库的详情,请参考红帽客户门户网站中的 Red Hat AMQ 7 支持的配置

    storeConfiguration.jdbcConnectionUrl

    您的数据库服务器的完整 JDBC 连接 URL,包括数据库名称和所有配置参数。例如:

    jdbc:postgresql://postgresql-service.default.svc.cluster.local:5432/postgres?user=postgres&password=postgres

    在示例中,数据库名称为 postgres

    HAPolicyConfiguration
    设置为 SHARED_STORE_PRIMARY,以确保代理使用 JDBC 租期锁定来防止多个代理并行访问数据库表。如果错误地部署了第二个代理实例,租期锁定会阻止第二个代理写入数据库。
  3. (可选)根据需要更改以下属性的默认值:

    storeConfiguration.jdbcNetworkTimeout
    JDBC 网络连接超时,以毫秒为单位。默认值为 20000 毫秒。
    storeConfiguration.jdbcLockRenewPeriod
    当前 JDBC 锁定的续订周期的长度(以毫秒为单位)。当这个时间过后,代理可以续订锁定。设置一个比 storeConfiguration.jdbcLockExpiration 值小多次的值,为代理提供足够时间来扩展租期的值,并为代理提供在连接问题时尝试续订锁定的时间。默认值为 2000 毫秒。
    storeConfiguration.jdbcLockExpiration
    以毫秒为单位,当前 JDBC 锁定被视为拥有(即获取或续订),即使 storeConfiguration.jdbcLockRenewPeriod 的值已经过。代理定期尝试根据 storeConfiguration.jdbcLockRenewPeriod 的值定期更新它拥有的锁定。例如,如果代理无法更新锁定,例如因为连接问题,代理会持续尝试续订锁定,直到 storeConfiguration.jdbcLockExpiration 的值被传递,因为锁定上次成功获取或更新。上述续订行为的一个例外是在另一个代理获取锁定时。如果数据库管理系统(DBMS)和代理之间存在时间对齐,或者对垃圾回收有较长的暂停,会出现这种情况。在这种情况下,最初拥有锁定的代理会考虑锁定丢失,且不会尝试更新它。如果 JDBC 锁定尚未由当前在过期时间后拥有它的代理更新,则另一个代理可以建立 JDBC 锁定。默认值为 20000 毫秒。
    storeConfiguration.jdbcJournalSyncPeriod
    代理日志与 JDBC 同步的时间(以毫秒为单位)。默认值为 5 毫秒。
    storeConfiguration.jdbcMaxPageSizeBytes
    当 AMQ Broker 将消息保留到 JDBC 数据库时,每个页面文件的最大大小(以字节为单位)。默认值为 102400,即 100KB。您指定的值还支持字节表示法,如 "K" "MB" 和 "GB"。
  4. 保存 CR。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat