`

ActiveMQ使用笔记(二)ActiveMQ消息持久化

阅读更多

 

ActiveMQ使用笔记(二)ActiveMQ消息持久化

在broker中设置属性persistent=”true”(默认是true),同时发送的消息也应该是persitent类型的。ActiveMQ消息持久化有三种方式:AMQ、KahaDB、JDBC。

1、AMQ

AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特点。消息存储在一个个文件中,文件的默认大小为32兆,如果一条消息的大小超过了32 兆,那么这个值必须设置大点。当一个存储文件中的消息已经全部被消费,那么这个文件将被标识为可删除,在下一个清除阶段,这个文件被删除。默认配置如下:

<persistenceAdapter>
      <amqPersistenceAdapter directory="activemq-data" maxFileLength="32mb"/>
    </persistenceAdapter>

AMQ的属性:

属性名称 默认值 描述
directory activemq-data 消息文件和日志的存储目录
useNIO true 使用NIO协议存储消息
syncOnWrite false 同步写到磁盘,这个选项对性能影响非常大
maxFileLength 32mb 一个消息文件的大小
persistentIndex true 消息索引的持久化,如果为false,那么索引保存在内存中
maxCheckpointMessageAddSize 4kb 一个事务允许的最大消息量
cleanupInterval 30000 清除操作周期,单位ms
indexBinSize 1024 索引文件缓存页面数,缺省为1024,当amq扩充或者缩减存储时,会锁定整个broker,导致一定时间的阻塞,所以这个值应该调整到比较大,但是代码中实现会动态伸缩,调整效果并不理想。
indexKeySize 96 索引key的大小,key是消息ID
indexPageSize 16kb 索引的页大小
directoryArchive archive 存储被归档的消息文件目录
archiveDataLogs false 当为true时,归档的消息文件被移到directoryArchive,而不是直接删除

 

2、KahaDB

KahaDB是基于文件的本地数据库储存形式,虽然没有AMQ的速度快,但是它具有强扩展性,恢复的时间比AMQ短,从5.4版本之后KahaDB做为默认的持久化方式。默认配置如下:

<persistenceAdapter>
        <kahaDB directory="activemq-data" journalMaxFileLength="32mb"/>
    </persistenceAdapter>

 

KahaDB的属性:

property name default value Comments
directory activemq-data 消息文件和日志的存储目录
indexWriteBatchSize 1000 一批索引的大小,当要更新的索引量到达这个值时,更新到消息文件中
indexCacheSize 10000 内存中,索引的页大小
enableIndexWriteAsync false 索引是否异步写到消息文件中
journalMaxFileLength 32mb 一个消息文件的大小
enableJournalDiskSyncs true 是否讲非事务的消息同步写入到磁盘
cleanupInterval 30000 清除操作周期,单位ms
checkpointInterval 5000 索引写入到消息文件的周期,单位ms
ignoreMissingJournalfiles false 忽略丢失的消息文件,false,当丢失了消息文件,启动异常
checkForCorruptJournalFiles false 检查消息文件是否损坏,true,检查发现损坏会尝试修复
checksumJournalFiles false 产生一个checksum,以便能够检测journal文件是否损坏。
5.4版本之后有效的属性:    
archiveDataLogs false 当为true时,归档的消息文件被移到directoryArchive,而不是直接删除
directoryArchive null 存储被归档的消息文件目录
databaseLockedWaitDelay 10000 在使用负载时,等待获得文件锁的延迟时间,单位ms
maxAsyncJobs 10000 同个生产者产生等待写入的异步消息最大量
concurrentStoreAndDispatchTopics false 当写入消息的时候,是否转发主题消息
concurrentStoreAndDispatchQueues true 当写入消息的时候,是否转发队列消息
5.6版本之后有效的属性:    
archiveCorruptedIndex false 是否归档错误的索引

从5.6版本之后,有可能发布通过多个kahadb持久适配器来实现分布式目标队列存储。什么时候用呢?如果有一个快速的生产者和消费者,当某一个 时刻生产者发生了不规范的消费,那么有可能产生一条消息被存储在两个消息文件中,同时,有些目标队列是危险的并且要求访问磁盘。在这种情况下,你应该用通 配符来使用mKahaDB。如果目标队列是分布的,事务是可以跨越多个消息文件的。

每个KahaDB的实例都可以配置单独的适配器,如果没有目标队列提交给filteredKahaDB,那么意味着对所有的队列有效。如果一个队列没有对应的适配器,那么将会抛出一个异常。配置如下:

<persistenceAdapter>
  <mKahaDB directory="${activemq.base}/data/kahadb">
    <filteredPersistenceAdapters>
      <!-- match all queues -->
      <filteredKahaDB queue=">">
        <persistenceAdapter>
          <kahaDB journalMaxFileLength="32mb"/>
        </persistenceAdapter>
      </filteredKahaDB>
      
      <!-- match all destinations -->
      <filteredKahaDB>
        <persistenceAdapter>
          <kahaDB enableJournalDiskSyncs="false"/>
        </persistenceAdapter>
      </filteredKahaDB>
    </filteredPersistenceAdapters>
  </mKahaDB>
</persistenceAdapter>

 如果filteredKahaDB的perDestination属性设置为true,那么匹配的目标队列将会得到自己对应的KahaDB实例。配置如下:

<persistenceAdapter>
  <mKahaDB directory="${activemq.base}/data/kahadb">
    <filteredPersistenceAdapters>
      <!-- kahaDB per destinations -->
      <filteredKahaDB perDestination="true" >
        <persistenceAdapter>
          <kahaDB journalMaxFileLength="32mb" />
        </persistenceAdapter>
      </filteredKahaDB>
    </filteredPersistenceAdapters>
  </mKahaDB>
</persistenceAdapter>

 

3、JDBC

配置JDBC适配器:

    <persistenceAdapter>
        <jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="false" />
    </persistenceAdapter>

dataSource指定持久化数据库的bean,createTablesOnStartup是否在启动的时候创建数据表,默认值是true,这样每次启动都会去创建数据表了,一般是第一次启动的时候设置为true,之后改成false。

MYSQL持久化bean

<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
    <property name="username" value="activemq"/>
    <property name="password" value="activemq"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>

 SQL Server持久化bean

<bean id="mssql-ds" class="net.sourceforge.jtds.jdbcx.JtdsDataSource" destroy-method="close">
   <property name="serverName" value="SERVERNAME"/>
   <property name="portNumber" value="PORTNUMBER"/>
   <property name="databaseName" value="DATABASENAME"/>
   <property name="user" value="USER"/>
   <property name="password" value="PASSWORD"/>
</bean>

 Oracle持久化bean

<bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@10.53.132.47:1521:activemq"/>
    <property name="username" value="activemq"/>
    <property name="password" value="activemq"/>
    <property name="maxActive" value="200"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>

 DB2持久化bean

<bean id="db2-ds" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">
      <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"/>
      <property name="url" value="jdbc:db2://hndb02.bf.ctc.com:50002/activemq"/>
      <property name="username" value="activemq"/>
      <property name="password" value="activemq"/>
      <property name="maxActive" value="200"/>
      <property name="poolPreparedStatements" value="true"/>
  </bean>

 

 

 

 

分享到:
评论

相关推荐

    activemq activeMq笔记

    Apache ActiveMQ 是一款非常流行的开源消息中间件,它支持 Java 消息服务 (JMS) 标准,并提供了多种高级功能,例如持久化、集群、故障转移等。ActiveMQ 能够帮助开发者实现解耦、可靠的消息传输以及高性能的应用程序...

    ActiveMQ 教学视频/教程 /附带笔记等资源

    - **持久化(Persistence)**:ActiveMQ支持消息持久化,即使在服务器重启后也能确保消息不会丢失。 - **事务(Transactions)**:允许用户在一个操作中发送多条消息,保证所有消息要么全部成功,要么全部失败。 ...

    activemq系列笔记

    - **持久化**:ActiveMQ支持将消息持久化到磁盘,即使服务器重启,消息也不会丢失,保证了消息的可靠性。 - **高可用性**:通过网络集群和故障转移机制,ActiveMQ可以实现零停机时间,确保服务始终可用。 - *...

    activeMQ笔记

    #### 二、非持久性和持久性消息传递的区别 1. **非持久性消息**:这类消息被标记为`NON_PERSISTENT`,意味着它们最多只被传递一次。这意味着如果目标接收方(例如一个JMS服务)在消息发送时处于离线状态,则该消息...

    ActiveMQ使用笔记

    #### 二、ActiveMQ消息持久化 **1. 概述** 消息持久化是指将消息存储在非易失性存储介质上,以便在Broker重启时仍然能够恢复消息。ActiveMQ支持多种消息持久化机制,包括AMQ、KahaDB和JDBC。 **2. AMQ** - **...

    ActiveMQ笔记

    **ActiveMQ笔记** ActiveMQ是Apache软件基金会的一个开源项目,它是Java消息服务(JMS)的一个实现,专门用于处理消息传递。作为一个中间件,ActiveMQ允许应用程序之间通过异步通信来解耦它们的功能,提高系统的可...

    ActiveMQ学习笔记之一--ActiveMQ下载

    ActiveMQ支持多种优化策略,如持久化、负载均衡、事务和消息确认。同时,它还提供了安全特性,如SSL/TLS加密、用户权限控制和认证机制。 总结,ActiveMQ是企业级消息传递的可靠工具,其易用性、灵活性和丰富的特性...

    消息队列activemq学习笔记

    - **可靠性**:消息队列通常支持持久化存储,确保消息不会丢失。 - **扩展性**:可以根据需要轻松地添加更多的消费者来处理消息。 ![目标](C:\Users\Microsoft\AppData\Roaming\Typora\typora-user-images\image...

    ActiveMQ学习笔记之四--启动嵌入式Broker(纯代码方式)

    在实际应用中,你可能需要根据业务需求配置更多选项,比如添加持久化存储、设置消息策略、安全认证等。通过调整`BrokerService`的各种属性和方法,可以定制化你的嵌入式Broker以满足特定需求。 总之,启动ActiveMQ...

    ActiveMq笔记.zip

    **ActiveMQ笔记** ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它是Java Message Service (JMS) 的实现,广泛应用于分布式系统中的异步通信。本笔记将详细探讨ActiveMQ的核心概念、工作原理以及实际应用...

    Apache ActiveMQ学习笔记【原创:mq的方式有两种:点到点和发布/订阅】

    ActiveMQ 的主要特性包括支持多种协议(如 OpenWire、AMQP、STOMP、MQTT、REST),持久性消息存储机制,以及高可用性和负载均衡能力等。 ##### 1.2 下载与安装 根据提供的部分文件内容,我们可以了解到 ActiveMQ ...

    ActiveMQ学习笔记(二) JMS与Spring

    此外,通过设置消息属性,还可以控制消息是否持久化存储,即使服务器重启也能保证不丢失。 6. **异常处理与回退策略** 在Spring中,可以通过定义错误处理策略来应对消息处理失败的情况,例如重新发送消息、记录...

    ActiveMQ整合SpringBoot笔记及代码

    ActiveMQ支持发布/订阅、点对点等多种消息模式,以及事务处理、消息持久化等功能,确保了消息的可靠传输。 **二、SpringBoot整合ActiveMQ** 1. **依赖引入** 在SpringBoot项目中,我们需要添加ActiveMQ的依赖。在...

    activeMQ总结

    5. 灵活性:允许配置各种消息持久化策略、网络拓扑和负载均衡策略。 6. 丰富的管理工具:提供Web控制台和命令行工具,方便监控和管理消息队列。 总结 ActiveMQ作为JMS的一个实现,提供了一种标准化的消息传递解决...

    active mq 学习笔记

    4. **持久化机制**:支持通过JDBC和Journal两种方式实现高效的消息持久化。 5. **高可用性**:支持高性能的集群配置、客户端-服务器模式以及点对点通信模式。 #### 二、ActiveMQ的安装与启动 **安装步骤:** 1. **...

    分享一些ActiveMQ的资料

    "ActiveMQ in Action"是一本权威的ActiveMQ专著,深入探讨了ActiveMQ的高级特性,如集群、持久化、网络连接等,适合已经有一定基础并希望深入了解的开发者。 通过这些资料,用户可以系统性地学习和掌握ActiveMQ,...

    ActiveMQ.pdf

    ActiveMQ使用消息中间件技术,可以有效地在不同的系统之间异步传输消息,解决系统解耦、削峰、异步处理等问题。 首先,ActiveMQ能够实现系统的解耦。在传统的系统设计中,一个系统要调用另一个系统,通常是通过同步...

    ActiveMQ+In+Action学习笔记.docx

    2. 可靠传输:消息在传输过程中得到持久化存储,确保即使接收方暂时不可用,消息也不会丢失。 3. 事务支持:允许将多个消息操作组合成一个原子事务,保证数据一致性。 4. 消息过滤:可以通过消息选择器控制哪些消息...

    ActiveMQ+In+Action翻译笔记-+更新版

    ActiveMQ支持高可用、集群、故障转移和持久化消息等特性,可以用于负载均衡和提高系统可靠性。它的设计目标是为了解决分布式系统中的消息传递和集成问题,同时也支持通过多种协议进行消息通信,如TCP/IP、SSL、NIO、...

Global site tag (gtag.js) - Google Analytics