搜索

4.5. 配置消息持久性

download PDF

默认情况下,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
      ...
  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
      ...
    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 值小于 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

© 2024 Red Hat, Inc.